home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / working.s < prev    next >
Text File  |  1997-01-31  |  148KB  |  10,285 lines

  1.  
  2.  
  3. FILTER    macro
  4. ;    bchg    #1,$bfe001
  5.     endm
  6.  
  7. BLACK    macro
  8.     move.w    #0,$dff180
  9.     endm
  10.  
  11. RED    macro
  12.     move.w    #$f00,$dff180
  13.     endm
  14.  
  15. GREEN    macro
  16.     move.w    #$0f0,$dff180
  17.     endm
  18.  
  19. BLUE    macro
  20.     move.w    #$f,$dff180
  21.     endm
  22.  
  23.  
  24.     opt    P=68020
  25.  
  26.     include utils:sysinc/hardware/intbits.i
  27.  
  28. CD32VER equ 0
  29.  
  30. maxscrdiv EQU 8
  31. max3ddiv EQU 5
  32. playerheight EQU 12*1024
  33. playercrouched EQU 8*1024
  34. scrheight EQU 80
  35.  
  36. ; k/j/m
  37.  
  38. ; 4/8
  39. ; s/x
  40. ; b/n
  41.  
  42. midoffset EQU 104*4*40
  43.  
  44.  
  45.  SECTION Scrn,CODE
  46. OpenLib       equ -552
  47. CloseLib      equ -414
  48.  
  49. INTREQ        equ    $09C
  50. INTENA        equ    $09A
  51. INTENAR    equ    $01C
  52. DMACON        equ    $096
  53.  
  54. SERPER        equ    $032
  55. SERDATR    equ    $018
  56. SERDAT        equ    $030
  57. vhposr        equ $006    
  58. vhposrl    equ $007 
  59.  
  60. bltcon0    equ $40 
  61. bltcon1    equ $42
  62. bltcpt        equ $48
  63. bltbpt        equ $4c
  64. bltapt        equ $50
  65. spr0ctl    equ $142
  66. spr1ctl    equ $14a
  67. spr2ctl    equ $152
  68. spr3ctl    equ $15a
  69. spr4ctl    equ $162
  70. spr5ctl    equ $16a
  71. spr6ctl    equ $172
  72. spr7ctl    equ $17a
  73. spr0pos    equ $140
  74. spr1pos    equ $148
  75. spr2pos    equ $150
  76. spr3pos    equ $158
  77. spr4pos    equ $160
  78. spr5pos    equ $168
  79. spr6pos    equ $170
  80. spr7pos    equ $178
  81. bltdpt         equ $54
  82. bltafwm    equ $44
  83. bltalwm    equ $46
  84. bltsize         equ $58
  85. bltcmod         equ $60
  86. bltbmod         equ $62
  87. bltamod         equ $64
  88. bltdmod         equ $66
  89. diwstart        equ $8e         ; Screen hardware registers.
  90. diwstop         equ $90
  91. ddfstart        equ $92
  92. ddfstop         equ $94
  93. bplcon0         equ $100
  94. bplcon1         equ $102
  95. col0            equ $180
  96. col1            equ $182
  97. col2        equ $184
  98. col3        equ $186
  99. col4        equ $188
  100. col5        equ $18a
  101. col6        equ $18c
  102. col7        equ $18e
  103. col8            equ $190
  104. col9            equ $192
  105. col10           equ $194
  106. col11           equ $196
  107. col12           equ $198
  108. col13           equ $19a
  109. dmacon        equ $96
  110. dmaconr        equ $002
  111. intenar        equ $01c
  112. intena        equ $09a
  113. intreq        equ $09c
  114. intreqr        equ $01e
  115. intreqrl    equ $01f
  116. bpl1pth         equ $e0
  117. bpl1ptl         equ $e2
  118. bpl2pth        equ $e4
  119. bpl2ptl        equ $e6
  120. bpl3pth        equ $e8
  121. bpl3ptl        equ $ea
  122. bpl4pth        equ $ec
  123. bpl4ptl        equ $ee
  124. bpl5pth        equ $f0
  125. bpl5ptl        equ $f2
  126. bpl6pth        equ $f4
  127. bpl6ptl        equ $f6
  128. bpl7pth        equ $f8
  129. bpl7ptl        equ $fa
  130. bpl8pth        equ $fc
  131. bpl8ptl        equ $fe
  132. spr0pth        equ $120
  133. spr0ptl        equ $122
  134. spr1pth        equ $124
  135. spr1ptl        equ $126
  136. spr2pth        equ $128
  137. spr2ptl        equ $12a
  138. spr3pth        equ $12c
  139. spr3ptl        equ $12e
  140. spr4pth        equ $130
  141. spr4ptl        equ $132
  142. spr5pth        equ $134
  143. spr5ptl        equ $136
  144. spr6pth        equ $138
  145. spr6ptl        equ $13a
  146. spr7pth        equ $13c
  147. spr7ptl        equ $13e
  148.  
  149. ; move.l #length,d0
  150. ; moveq.l #2,d1    ; chipmem
  151. ; move.l 4.w,a6
  152. ; jsr allocmem(a6) = -198
  153.  
  154. ; tst.l d0
  155. ; beq.s ohbugger
  156. ; move.l d0,memaddr
  157.  
  158.  
  159. ; move.l 4.w,a6
  160. ; move.l memaddr,a1
  161. ; move.l #size,d0
  162. ; jsr freemem(a6) =-210
  163.  
  164.  
  165. ** This waits for the blitter to finish before allowing program
  166. ** execution to continue.
  167.  
  168.  
  169.  include "ab3:source/protsetupdecode"
  170.  
  171. SAVEREGS MACRO
  172.  movem.l d0-d7/a0-a6,-(a7)
  173.  ENDM
  174.  
  175. GETREGS MACRO
  176.  movem.l (a7)+,d0-d7/a0-a6
  177.  ENDM
  178.  
  179.  
  180. WB MACRO
  181. \@bf:
  182.  btst #6,dmaconr(a6)
  183.  bne.s \@bf
  184.  ENDM
  185.  
  186. WBa MACRO
  187. \@bf:
  188.  move.w #\2,$dff180
  189.  
  190.  btst #6,$bfe001
  191.  bne.s \@bf
  192. \@bz:
  193.  
  194.  move.w #$f0f,$dff180
  195.  
  196.  btst #6,$bfe001
  197.  beq.s \@bz
  198.  
  199.  ENDM
  200.  
  201. *Another version for when a6 <> dff000
  202.  
  203. WBSLOW MACRO
  204. \@bf:
  205.  btst #6,$dff000+dmaconr
  206.  bne.s \@bf
  207.  ENDM
  208.  
  209. WT MACRO
  210. \@bf:
  211.  btst #6,(a3)
  212.  bne.s \@bd
  213.  rts
  214. \@bd: 
  215.  btst #4,(a0)
  216.  beq.s \@bf
  217.  ENDM
  218.  
  219. WTNOT MACRO
  220. \@bf:
  221.  btst #6,(a3)
  222.  bne.s \@bd
  223.  rts
  224. \@bd: 
  225.  btst #4,(a0)
  226.  bne.s \@bf
  227.  ENDM
  228.  
  229. **
  230.  
  231.  include "ab3:source/ProtectionProtection"
  232.  include "macros.i"
  233.  include "ab3:source/defs.i"
  234.  
  235.  move.w (a0)+,mors
  236.  
  237. ; PROTFCALC
  238. ; PROTGCALC
  239. ; PROTHCALC
  240. ; PROTICALC
  241. ; PROTKCALC
  242. ; PROTLCALC
  243. ; PROTMCALC
  244.  
  245.  
  246.  rts
  247.  
  248.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  249.  move.w intenar(a6),_storeint
  250.  and.w #$c000,_storeint
  251.  
  252.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  253.  
  254.  st GOURSEL
  255.  
  256.  move.l 4.w,a6
  257.  lea VBLANKInt(pc),a1
  258.  moveq #INTB_COPER,d0
  259.  jsr _LVOAddIntServer(a6)
  260.  
  261.  move.l 4.w,a6
  262.  lea KEYInt(pc),a1
  263.  moveq #INTB_PORTS,d0
  264.  jsr _LVOAddIntServer(a6)
  265.  
  266.  move.l 4.w,a6
  267.  jsr _LVOSuperState(a6)
  268.  move.l d0,SSTACK
  269.  
  270.  DATA_CACHE_OFF d2
  271.  
  272.  move.l 4.w,a6
  273.  move.l SSTACK,d0
  274.  jsr _LVOUserState(a6)
  275.  
  276.  
  277.  clr.b PLR1KEYS
  278.  clr.b PLR1PATH
  279.  clr.b PLR1MOUSE
  280.  st PLR1JOY
  281.  clr.b PLR2KEYS
  282.  clr.b PLR2PATH
  283.  clr.b PLR2MOUSE
  284.  st PLR2JOY
  285.  
  286.  PRSDO
  287.  
  288.  move.l #2,d1    
  289.  move.l #10240*2,d0
  290.  move.l 4.w,a6
  291.  jsr -198(a6)
  292.  move.l d0,TEXTSCRN
  293.  move.w d0,TSPTl
  294.  swap d0
  295.  move.w d0,TSPTh
  296.  
  297.  move.l #nullspr,d0
  298.  move.w d0,txs0l
  299.  move.w d0,txs1l
  300.  move.w d0,txs2l
  301.  move.w d0,txs3l
  302.  move.w d0,txs4l
  303.  move.w d0,txs5l
  304.  move.w d0,txs6l
  305.  move.w d0,txs7l
  306.  swap d0
  307.  move.w d0,txs0h
  308.  move.w d0,txs1h
  309.  move.w d0,txs2h
  310.  move.w d0,txs3h
  311.  move.w d0,txs4h
  312.  move.w d0,txs5h
  313.  move.w d0,txs6h
  314.  move.w d0,txs7h 
  315.  
  316.  move.l #1,d1    
  317.  move.l #120000,d0
  318.  move.l 4.w,a6
  319.  jsr -198(a6)
  320.  move.l d0,LEVELDATA
  321.  
  322.  jsr START
  323.  
  324.  rts
  325.  
  326. _storeint
  327.     dc.w 0
  328.  
  329. * Load level into buffers.
  330.  clr.b doanything
  331.  
  332. ; DRAW TEXT SCREEN
  333.  
  334. TWEENTEXT:
  335.  
  336.  move.l #LEVELTEXT,a0
  337.  move.w PLOPT,d0
  338.  muls #82*16,d0
  339.  add.l d0,a0
  340.  
  341.  move.w #14,d7
  342.  move.w #0,d0
  343. DOWNTEXT:
  344.  move.l TEXTSCRN,a1
  345.  jsr DRAWLINEOFTEXT
  346.  addq #1,d0
  347.  add.w #82,a0
  348.  dbra d7,DOWNTEXT
  349.  rts
  350.  
  351. FONTADDRS:
  352.  dc.l ENDFONT0,CHARWIDTHS0
  353.  dc.l ENDFONT1,CHARWIDTHS1
  354.  dc.l ENDFONT2,CHARWIDTHS2
  355.  
  356. ENDFONT0:
  357.  incbin "endfont0"
  358. CHARWIDTHS0:
  359.  incbin "charwidths0"
  360. ENDFONT1:
  361.  incbin "endfont1"
  362. CHARWIDTHS1:
  363.  incbin "charwidths1"
  364. ENDFONT2:
  365.  incbin "endfont2"
  366. CHARWIDTHS2:
  367.  incbin "charwidths2"
  368.  
  369.  even
  370.  
  371. DRAWLINEOFTEXT:
  372.  movem.l d0/a0/d7,-(a7)
  373.  
  374.  muls #80*16,d0
  375.  add.l d0,a1    ; screen pointer
  376.  
  377.  move.l #FONTADDRS,a3
  378.  moveq #0,d0
  379.  move.b (a0)+,d0
  380.  move.l (a3,d0.w*8),a2
  381.  move.l 4(a3,d0.w*8),a3
  382.  
  383.  moveq #0,d1    ; width counter:
  384.  move.w #79,d6
  385.  tst.b (a0)+
  386.  beq.s NOTCENTRED
  387.  moveq #-1,d5
  388.  move.l a0,a4
  389.  moveq #0,d2
  390.  moveq #0,d3
  391.  move.w #79,d0    ; number of chars
  392. .addup:
  393.  addq #1,d5
  394.  move.b (a4)+,d2
  395.  move.b -32(a3,d2.w),d4
  396.  add.w d4,d3
  397.  cmp.b #32,d2
  398.  beq.s .DONTPUTIN
  399.  move.w d5,d6
  400.  move.w d3,d1
  401. .DONTPUTIN:
  402.  dbra d0,.addup
  403.  asr.w #1,d1
  404.  neg.w d1
  405.  add.w #320,d1    ; horiz pos of start x
  406.  
  407. NOTCENTRED:
  408.  move.w d6,d7
  409. DOACHAR:
  410.  moveq #0,d2
  411.  move.b (a0)+,d2
  412.  sub.w #32,d2
  413.  moveq #0,d6
  414.  move.b (a3,d2.w),d6
  415.  asl.w #5,d2
  416.  lea (a2,d2.w),a4    ; char font
  417. val SET 0
  418.  REPT 16
  419.  move.w (a4)+,d0
  420.  bfins d0,val(a1){d1:d6}
  421. val SET val+80
  422.  ENDR
  423.  add.w d6,d1
  424.  dbra d7,DOACHAR
  425.  movem.l (a7)+,d0/a0/d7
  426.  rts 
  427.  
  428.  
  429. CLRTWEENSCRN:
  430.  move.l TEXTSCRN,a0
  431.  move.w #(10240/16)-1,d0
  432.  move.l #$0,d1
  433. .lll
  434.  move.l d1,(a0)+
  435.  move.l d1,(a0)+
  436.  move.l d1,(a0)+
  437.  move.l d1,(a0)+
  438.  move.l d1,(a0)+
  439.  move.l d1,(a0)+
  440.  move.l d1,(a0)+
  441.  move.l d1,(a0)+
  442.  dbra d0,.lll
  443.  rts
  444.  
  445. PLAYTHEGAME:
  446.  
  447.  move.w #0,TXTCOLL
  448.  
  449.  bsr CLRTWEENSCRN
  450.  
  451.  cmp.b #'n',mors
  452.  bne.s .notext
  453.  bsr TWEENTEXT
  454. .notext
  455.  
  456.  move.l #TEXTCOP,$dff080
  457.  
  458.  move.w #$10,d0
  459.  move.w #7,d1
  460.  
  461. .fdup
  462.  move.w d0,TXTCOLL
  463.  add.w #$121,d0
  464. .wtframe:
  465.  btst #5,$dff000+intreqrl
  466.  beq.s .wtframe
  467.  move.w #$0020,$dff000+intreq
  468.  dbra d1,.fdup
  469.  
  470.  jsr INITCOPPERSCRN
  471.  
  472. ; Get level memory.
  473.  
  474.  move.l #1,d1
  475.  move.l #50000,d0
  476.  move.l 4.w,a6
  477.  jsr -198(a6)
  478.  move.l d0,LEVELGRAPHICS
  479.  
  480.  move.l #1,d1
  481.  move.l #40000,d0
  482.  move.l 4.w,a6
  483.  jsr -198(a6)
  484.  move.l d0,LEVELCLIPS
  485.  
  486.  move.l #$dff000,a6
  487.  jsr SETPLAYERS
  488.  
  489. ; move.l #LEVELDATAD,LEVELDATA
  490. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  491. ; move.l #LEVELCLIPSD,LEVELCLIPS
  492.  
  493. ; bra noload
  494.  
  495.  move.l doslib,a6
  496.  move.l #LDname,d1
  497.  move.l #1005,d2
  498.  jsr -30(a6)
  499.  move.l d0,LDhandle
  500.  
  501.  move.l doslib,a6
  502.  move.l d0,d1
  503.  move.l LEVELCLIPS,d2
  504.  move.l #40000,d3
  505.  jsr -42(a6)
  506.  
  507.  move.l doslib,a6
  508.  move.l LDhandle,d1
  509.  jsr -36(a6)
  510.  
  511. *************************************
  512.     move.l    LEVELCLIPS,d0
  513.     moveq    #0,d1
  514.     move.l LEVELDATA,a0
  515.     lea    WorkSpace,a1
  516.     lea    $0,a2
  517.     jsr    unLHA
  518. *************************************
  519.  
  520. ********
  521.  
  522.  move.l doslib,a6
  523.  move.l #LGname,d1
  524.  move.l #1005,d2
  525.  jsr -30(a6)
  526.  move.l d0,LGhandle
  527.  
  528.  move.l doslib,a6
  529.  move.l d0,d1
  530.  move.l LEVELCLIPS,d2
  531.  move.l #40000,d3
  532.  jsr -42(a6)
  533.  
  534.  move.l doslib,a6
  535.  move.l LGhandle,d1
  536.  jsr -36(a6)
  537.  
  538. *************************************
  539.     move.l    LEVELCLIPS,d0
  540.     moveq    #0,d1
  541.     move.l LEVELGRAPHICS,a0
  542.     lea    WorkSpace,a1
  543.     lea    $0,a2
  544.     jsr    unLHA
  545. *************************************
  546.  
  547.  
  548. ********
  549.  
  550.  move.l doslib,a6
  551.  move.l #LCname,d1
  552.  move.l #1005,d2
  553.  jsr -30(a6)
  554.  move.l d0,LChandle
  555.  
  556.  move.l doslib,a6
  557.  move.l d0,d1
  558.  move.l #WorkSpace+16384,d2
  559.  move.l #16000,d3
  560.  jsr -42(a6)
  561.  
  562.  move.l doslib,a6
  563.  move.l LChandle,d1
  564.  jsr -36(a6)
  565.  
  566. *************************************
  567.     move.l    #WorkSpace+16384,d0
  568.     moveq    #0,d1
  569.     move.l LEVELCLIPS,a0
  570.     lea    WorkSpace,a1
  571.     lea    $0,a2
  572.     jsr    unLHA
  573. *************************************
  574.  
  575.  
  576. *******
  577.  
  578. noload:
  579.  
  580. ********
  581.  
  582. ; move.l doslib,a6
  583. ; move.l #Prefsname,d1
  584. ; move.l #1005,d2
  585. ; jsr -30(a6)
  586. ; move.l d0,Prefshandle
  587.  
  588. ; move.l doslib,a6
  589. ; move.l d0,d1
  590. ; move.l #Prefsfile,d2
  591. ; move.l #50,d3
  592. ; jsr -42(a6)
  593.  
  594. ; move.l doslib,a6
  595. ; move.l Prefshandle,d1
  596. ; jsr -36(a6)
  597.  
  598. *******
  599.  
  600.  cmp.b #'s',Prefsfile+2
  601.  seq STEREO
  602.  
  603.  IFNE CD32VER
  604.  move.l doslib,a6
  605.  move.l #115,d1
  606.  jsr -198(a6)
  607.  ENDC
  608.  
  609.  
  610. ; move.l doslib,d0
  611. ; move.l d0,a1
  612. ; move.l 4.w,a6
  613. ; jsr CloseLib(a6)
  614.  
  615.  move.l #$dff000,a6
  616.  move.w #$87c0,dmacon(a6)
  617.  move.w #$8020,dmacon(a6)
  618. ; move.w intenar(a6),saveinters
  619.  move.w #$002f,intena(a6)
  620.  move.w #$00ff,$dff09e
  621.  
  622. *** Put myself in supervisor mode
  623.  
  624.  bra blag
  625. ; move.l $6c,d0
  626. ; move.l #blag,$6c
  627. ; move.w #$8010,intreq(a6)
  628.  
  629.  rts
  630.  
  631. saveit: ds.l 10
  632. doslibname: dc.b 'dos.library',0
  633.  even
  634. doslib: dc.l 0
  635.  
  636. mors: dc.w 0
  637.  
  638. LDname: dc.b 'ab3d2:levels/level_'
  639. LEVA:
  640.  dc.b 'a/twolev.bin',0
  641.  even
  642. LDhandle: dc.l 0
  643. LGname: dc.b 'ab3d2:levels/level_'
  644. LEVB:
  645.  dc.b 'a/twolev.graph.bin',0
  646.  even
  647. LGhandle: dc.l 0
  648. LCname: dc.b 'ab3d2:levels/level_'
  649. LEVC:
  650.  dc.b 'a/twolev.clips',0
  651.  even
  652. LChandle: dc.l 0
  653.  
  654.     cnop    0,4
  655.  
  656. Prefsname: dc.b 'ram:prefs',0
  657.  even
  658. Prefshandle: dc.l 0
  659.  
  660. Prefsfile:
  661.  dc.b 'k4nx'
  662.  ds.b 50
  663.  
  664.  even
  665.  
  666.  cnop 0,4
  667.  
  668. VBLANKInt
  669.  dc.l 0,0
  670.  dc.b NT_INTERRUPT,100
  671.  dc.l Prefsname
  672.  dc.l 0
  673.  dc.l Chan0inter
  674.  
  675.  
  676. KEYInt
  677.  dc.l 0,0
  678.  dc.b NT_INTERRUPT,127
  679.  dc.l Prefsname
  680.  dc.l 0
  681.  dc.l key_interrupt
  682.  
  683.  
  684. blag:
  685. ; move.w #$10,intreq(a6)
  686. ; move.l d0,$6c
  687. ; move.w #$7fff,intena(a6)
  688.  
  689. ; move.w #$20,$dff1dc
  690.  
  691. ; move.l 4.w,a6
  692. ; lea VBLANKInt(pc),a1
  693. ; moveq #INTB_COPER,d0
  694. ; jsr _LVOAddIntServer(a6)
  695.  
  696. ****************************
  697. * Initialize level
  698. ****************************
  699. * Poke all clip offsets into
  700. * correct bit of level data.
  701. ****************************
  702.  move.l LEVELGRAPHICS,a0
  703.  move.l 12(a0),a1
  704.  add.l a0,a1
  705.  move.l a1,ZoneGraphAdds
  706.  move.l (a0),a1
  707.  add.l a0,a1
  708.  move.l a1,DoorData
  709.  move.l 4(a0),a1
  710.  add.l a0,a1
  711.  move.l a1,LiftData
  712.  move.l 8(a0),a1
  713.  add.l a0,a1
  714.  move.l a1,SwitchData
  715.  adda.w #16,a0
  716.  move.l a0,ZoneAdds
  717.  
  718.  move.l LEVELDATA,a1
  719.  move.l 16+6(a1),a2
  720.  add.l a1,a2
  721.  move.l a2,Points
  722.  move.w 8+6(a1),d0
  723.  lea 4(a2,d0.w*4),a2
  724.  move.l a2,PointBrights
  725.  
  726.  move.l 20+6(a1),a2
  727.  add.l a1,a2
  728.  move.l a2,FloorLines
  729.  move.l 24+6(a1),a2
  730.  add.l a1,a2
  731.  move.l a2,ObjectData
  732. *****************************************
  733. * Just for charles
  734.  
  735. ; move.w #$6060,6(a2)
  736. ; move.l #$d0000,8(a2)
  737. ; sub.w #40,4(a2)
  738. ; move.w #45*256+45,14(a2)
  739. ****************************************
  740.  move.l 28+6(a1),a2
  741.  add.l a1,a2
  742.  move.l a2,PlayerShotData
  743.  move.l 32+6(a1),a2
  744.  add.l a1,a2
  745.  move.l a2,NastyShotData
  746.  
  747.  add.l #64*20,a2
  748.  move.l a2,OtherNastyData
  749.  
  750.  move.l 36+6(a1),a2
  751.  add.l a1,a2
  752.  move.l a2,ObjectPoints  
  753.  move.l 40+6(a1),a2
  754.  add.l a1,a2
  755.  move.l a2,PLR1_Obj
  756.  move.l 44+6(a1),a2
  757.  add.l a1,a2
  758.  move.l a2,PLR2_Obj
  759.  move.w 14+6(a1),NumObjectPoints
  760.  
  761. ; bra noclips
  762.   
  763.  move.l LEVELCLIPS,a2
  764.  moveq #0,d0
  765.  move.w 10+6(a1),d7    ;numzones
  766. assignclips:
  767.  move.l (a0)+,a3
  768.  add.l a1,a3    ; pointer to a zone
  769.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  770. dowholezone:
  771.  tst.w (a3)
  772.  blt.s nomorethiszone
  773.  tst.w 2(a3)
  774.  blt.s thisonenull
  775.  
  776.  move.l d0,d1
  777.  asr.l #1,d1
  778.  move.w d1,2(a3)
  779.  
  780. findnextclip:
  781.  cmp.w #-2,(a2,d0.l)
  782.  beq.s foundnextclip
  783.  addq.l #2,d0
  784.  bra.s findnextclip
  785. foundnextclip
  786.  addq.l #2,d0
  787.  
  788. thisonenull:
  789.  addq #8,a3 
  790.  bra.s dowholezone
  791. nomorethiszone:
  792.  dbra d7,assignclips
  793.  
  794.  lea (a2,d0.l),a2
  795.  move.l a2,CONNECT_TABLE
  796.  
  797. noclips:
  798.  
  799. * Put in addresses of glowything
  800.  
  801.  
  802. ************************************
  803.  
  804. ; cmp.b #'k',Prefsfile
  805. ; bne.s nkb
  806.  
  807. ;nkb:
  808. ; cmp.b #'m',Prefsfile
  809. ; bne.s nmc
  810. ; clr.b PLR1KEYS
  811. ; clr.b PLR1PATH
  812. ; st PLR1MOUSE
  813. ; clr.b PLR1JOY
  814. ;nmc:
  815. ; cmp.b #'j',Prefsfile
  816. ; bne.s njc
  817. ; clr.b PLR1KEYS
  818. ; clr.b PLR1PATH
  819. ; clr.b PLR1MOUSE
  820. ; st PLR1JOY
  821. ;njc:
  822.  
  823.  clr.b PLR1_StoodInTop
  824.  move.l #playerheight,PLR1s_height
  825.  
  826.  move.l #empty,pos1LEFT
  827.  move.l #empty,pos2LEFT
  828.  move.l #empty,pos1RIGHT
  829.  move.l #empty,pos2RIGHT
  830.  move.l #emptyend,Samp0endLEFT
  831.  move.l #emptyend,Samp1endLEFT
  832.  move.l #emptyend,Samp0endRIGHT
  833.  move.l #emptyend,Samp1endRIGHT
  834.  
  835.  move.l #nullspr,d0
  836.  move.w d0,s4l
  837.  move.w d0,s5l
  838.  move.w d0,s6l
  839.  move.w d0,s7l
  840.  swap d0
  841.  move.w d0,s4h
  842.  move.w d0,s5h
  843.  move.w d0,s6h
  844.  move.w d0,s7h 
  845.  
  846.  move.l #nullline,d0
  847.  move.w d0,n1l
  848.  swap d0
  849.  move.w d0,n1h
  850.  
  851.  move.l Panel,d0
  852.  move.w d0,p1l
  853.  swap d0
  854.  move.w d0,p1h
  855.  swap d0
  856.  add.l #40,d0
  857.  move.w d0,p2l
  858.  swap d0
  859.  move.w d0,p2h
  860.  swap d0
  861.  add.l #40,d0
  862.  move.w d0,p3l
  863.  swap d0
  864.  move.w d0,p3h
  865.  swap d0
  866.  add.l #40,d0
  867.  move.w d0,p4l
  868.  swap d0
  869.  move.w d0,p4h
  870.  swap d0
  871.  add.l #40,d0
  872.  move.w d0,p5l
  873.  swap d0
  874.  move.w d0,p5h
  875.  swap d0
  876.  add.l #40,d0
  877.  move.w d0,p6l
  878.  swap d0
  879.  move.w d0,p6h
  880.  swap d0
  881.  add.l #40,d0
  882.  move.w d0,p7l
  883.  swap d0
  884.  move.w d0,p7h
  885.  swap d0
  886.  add.l #40,d0
  887.  move.w d0,p8l
  888.  swap d0
  889.  move.w d0,p8h
  890.  
  891. *******************************
  892. * TIMER SCREEN SETUP
  893. ; move.l #TimerScr,d0
  894. ; move.w d0,p1l
  895. ; swap d0
  896. ; move.w d0,p1h
  897. ; move.w #$1201,Panelcon
  898.  
  899.  move.l #borders,d0
  900.  move.w d0,s0l
  901.  swap d0
  902.  move.w d0,s0h
  903.  move.l #borders+2592,d0
  904.  move.w d0,s1l
  905.  swap d0
  906.  move.w d0,s1h
  907.  move.l #borders+2592*2,d0
  908.  move.w d0,s2l
  909.  swap d0
  910.  move.w d0,s2h
  911.  move.l #borders+2592*3,d0
  912.  move.w d0,s3l
  913.  swap d0
  914.  move.w d0,s3h
  915.  
  916.  move.w #52*256+64,borders
  917.  move.w #212*256+0,borders+8
  918.  move.w #52*256+64,borders+2592
  919.  move.w #212*256+128,borders+8+2592
  920.  move.w #52*256+192,borders+2592*2
  921.  move.w #212*256+0,borders+8+2592*2
  922.  move.w #52*256+192,borders+2592*3
  923.  move.w #212*256+128,borders+8+2592*3
  924.  
  925.  move.l #FacePlace,d0
  926.  move.w d0,f1l
  927.  swap d0
  928.  move.w d0,f1h
  929.  move.l #FacePlace+32*24,d0
  930.  move.w d0,f2l
  931.  swap d0
  932.  move.w d0,f2h
  933.  move.l #FacePlace+32*24*2,d0
  934.  move.w d0,f3l
  935.  swap d0
  936.  move.w d0,f3h
  937.  move.l #FacePlace+32*24*3,d0
  938.  move.w d0,f4l
  939.  swap d0
  940.  move.w d0,f4h
  941.  move.l #FacePlace+32*24*4,d0
  942.  move.w d0,f5l
  943.  swap d0
  944.  move.w d0,f5h
  945.   
  946.  
  947.  move.l #bigfield,d0
  948.  move.w d0,ocl
  949.  swap d0
  950.  move.w d0,och
  951.  
  952.  bset.b #1,$bfe001
  953.  
  954. ; jmp stuff
  955. ;endstuff:
  956.  
  957.  move.w #$00ff,$dff09e
  958.  
  959. ; move.l #Blurbfield,$dff080
  960.  
  961.  move.w #0,d0
  962.  
  963.  move.l #scrn,d0
  964.  move.w d0,pl1l
  965.  swap d0
  966.  move.w d0,pl1h
  967.  
  968.  move.l #scrn+40,d0
  969.  move.w d0,pl2l
  970.  swap d0
  971.  move.w d0,pl2h
  972.  
  973.  move.l #scrn+80,d0
  974.  move.w d0,pl3l
  975.  swap d0
  976.  move.w d0,pl3h
  977.  
  978.  move.l #scrn+120,d0
  979.  move.w d0,pl4l
  980.  swap d0
  981.  move.w d0,pl4h
  982.  
  983.  move.l #scrn+160,d0
  984.  move.w d0,pl5l
  985.  swap d0
  986.  move.w d0,pl5h
  987.  
  988.  move.l #scrn+200,d0
  989.  move.w d0,pl6l
  990.  swap d0
  991.  move.w d0,pl6h
  992.  
  993.  move.l #scrn+240,d0
  994.  move.w d0,pl7l
  995.  swap d0
  996.  move.w d0,pl7h
  997.  
  998.  
  999. ****************************
  1000.  jsr INITPLAYER
  1001. ; bsr initobjpos
  1002. ****************************
  1003.  
  1004.  
  1005.  move.l #$dff000,a6
  1006.  
  1007.  move.l #null,$dff0a0
  1008.  move.w #100,$dff0a4
  1009.  move.w #443,$dff0a6
  1010.  move.w #63,$dff0a8
  1011.  
  1012.  move.l #null2,$dff0b0
  1013.  move.w #100,$dff0b4
  1014.  move.w #443,$dff0b6
  1015.  move.w #63,$dff0b8
  1016.  
  1017.  move.l #null4,$dff0c0
  1018.  move.w #100,$dff0c4
  1019.  move.w #443,$dff0c6
  1020.  move.w #63,$dff0c8
  1021.  
  1022.  move.l #null3,$dff0d0
  1023.  move.w #100,$dff0d4
  1024.  move.w #443,$dff0d6
  1025.  move.w #63,$dff0d8
  1026.  
  1027.  move.l #tab,a1
  1028.  move.w #64,d7
  1029.  move.w #0,d6
  1030. outerlop
  1031.  move.l #pretab,a0
  1032.  move.w #255,d5
  1033. scaledownlop:
  1034.  move.b (a0)+,d0
  1035.  ext.w d0
  1036.  ext.l d0
  1037.  muls d6,d0
  1038.  asr.l #6,d0
  1039.  move.b d0,(a1)+
  1040.  dbra d5,scaledownlop
  1041.  addq #1,d6
  1042.  dbra d7,outerlop
  1043.  
  1044.  move.l #$dff000,a6
  1045.  
  1046.  move.w #$c018,intena(a6)
  1047.  
  1048.  move.w #$f,dmacon(a6)
  1049.  move.w #$820f,dmacon(a6)
  1050.  
  1051. ; bsr protinit
  1052.  
  1053.  
  1054. ; move.w #$20,$1dc(a6)
  1055.  
  1056.  move.w #$0,$dff034
  1057.  move.w #0,Conditions
  1058.  
  1059.  cmp.b #'n',mors
  1060.  beq.s .nokeys
  1061.  move.w #%111111111111,Conditions
  1062. .nokeys:
  1063.  
  1064.  move.l #KeyMap,a5
  1065.  clr.b $45(a5)
  1066.  
  1067.  move.l #ingame,mt_data
  1068.  clr.b UseAllChannels
  1069.  
  1070. ; cmp.b #'b',Prefsfile+3
  1071. ; bne.s .noback
  1072. ; jsr mt_init
  1073. ;.noback:
  1074. ;
  1075. ; clr.b CHANNELDATA
  1076. ; clr.b CHANNELDATA+8
  1077. ; clr.b CHANNELDATA+16
  1078. ; clr.b CHANNELDATA+24
  1079. ;
  1080. ; cmp.b #'b',Prefsfile+3
  1081. ; bne.s noreserve
  1082. ;
  1083. ; st CHANNELDATA
  1084. ; st CHANNELDATA+8
  1085. ; st CHANNELDATA+16
  1086. ; st CHANNELDATA+24
  1087. ;noreserve: 
  1088.  
  1089. ; st CHANNELDATA
  1090. ; st CHANNELDATA+8
  1091.  
  1092.  move.l SampleList+6*8,pos0LEFT
  1093.  move.l SampleList+6*8+4,Samp0endLEFT
  1094.  move.l #playerheight,PLR1s_targheight
  1095.  move.l #playerheight,PLR1s_height
  1096.  move.l #playerheight,PLR2s_targheight
  1097.  move.l #playerheight,PLR2s_height
  1098.  
  1099. ; cmp.b #'n',mors
  1100. ; beq.s nohandshake
  1101. ;
  1102. ; move.b #%11011000,$bfd200
  1103. ; move.b #%00010000,$bfd000
  1104. ;waitloop:
  1105. ; btst.b #4,$bfd000
  1106. ; bne.s waitloop
  1107. ; move.b #%11000000,$bfd200
  1108.  
  1109. ;wtmouse:
  1110. ; btst #6,$bfe001
  1111. ; bne.s wtmouse
  1112.  
  1113. ;nohandshake:
  1114.  st doanything
  1115.  
  1116. ; jmp end
  1117.  
  1118.  move.l COPSCRN1,drawpt
  1119.  move.l COPSCRN2,olddrawpt
  1120.  
  1121.  jsr CLEARKEYBOARD
  1122.  jsr MAKEBACKROUT
  1123.  
  1124.  clr.b MASTERQUITTING
  1125.  
  1126.  cmp.b #'n',mors
  1127.  seq SLAVEQUITTING
  1128.  
  1129.  move.w #127,PLR2_energy
  1130.  
  1131. ; move.l #ANOTHERSUP,$80
  1132. ; trap #0
  1133. ; rts
  1134. ;
  1135. ;ANOTHERSUP:
  1136.  
  1137.  move.l $4.w,a6
  1138.  jsr _LVOSuperState(a6)
  1139.  move.l d0,SSTACK
  1140.  
  1141.  CACHE_FREEZE_OFF d2
  1142.  DATA_CACHE_ON d2
  1143.  
  1144.  move.l $4.w,a6
  1145.  move.l SSTACK,d0
  1146.  jsr _LVOUserState(a6)
  1147.  
  1148.  move.w #0,hitcol
  1149.  move.w #0,hitcol2
  1150.  
  1151.  cmp.b #'n',mors
  1152.  bne.s NOCLTXT
  1153.  
  1154.  move.b #0,lastpressed
  1155. .wtpress
  1156.  btst #6,$bfe001
  1157.  beq.s CLOSETXT
  1158.  btst #7,$bfe001
  1159.  beq.s CLOSETXT
  1160.  tst.b lastpressed
  1161.  beq.s .wtpress
  1162.  
  1163. CLOSETXT:
  1164.  
  1165.  move.w #$8f8,d0
  1166.  move.w #7,d1
  1167.  
  1168. .fdup
  1169.  move.w d0,TXTCOLL
  1170.  sub.w #$121,d0
  1171. .wtframe:
  1172.  btst #5,$dff000+intreqrl
  1173.  beq.s .wtframe
  1174.  move.w #$0020,$dff000+intreq
  1175.  dbra d1,.fdup
  1176.  
  1177.  move.w #0,TXTCOLL
  1178.  
  1179. NOCLTXT:
  1180.  
  1181.  
  1182.  
  1183.     move.l    4.w,a6
  1184.     jsr    _LVOForbid(a6)
  1185. ;    jsr    _LVODisable(a6)
  1186.  
  1187.  
  1188. ;    move.w    #%0111111111111111,intena+$dff000
  1189. ;    move.w    #%1000000011111111,intena+$dff000
  1190.  
  1191.  
  1192.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1193.  
  1194.  
  1195.  clr.b PLR1_Ducked
  1196.  clr.b PLR2_Ducked
  1197.  clr.b p1_ducked
  1198.  clr.b p2_ducked
  1199.  
  1200. ********************************************
  1201. ; jmp  ENDGAMESCROLL
  1202. ********************************************
  1203.  
  1204.  
  1205.  
  1206. lop:
  1207.  
  1208.  btst #6,$bfe001
  1209.  bne.b .nocop
  1210.  
  1211.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1212.  
  1213. .nocop
  1214.  
  1215.  cmp.b #'n',mors
  1216.  bne .nopause
  1217.  
  1218.  move.l #KeyMap,a5
  1219.  tst.b $19(a5)
  1220.  beq.s .nopause
  1221.  clr.b doanything
  1222.  
  1223. .waitrel:
  1224.  tst.b $19(a5)
  1225.  bne.s .waitrel
  1226.  
  1227.  bsr PAUSEOPTS
  1228.  
  1229.  
  1230.  st doanything
  1231. .nopause: 
  1232.  
  1233.  st READCONTROLS
  1234.  move.l #$dff000,a6
  1235.  
  1236.  move.w hitcol,d0
  1237.  beq.s nofadedownhc
  1238.  sub.w #$100,d0
  1239.  move.w d0,hitcol
  1240.  move.w d0,hitcol2
  1241. nofadedownhc:
  1242.  
  1243.  cmp.b #'n',mors
  1244.  beq .nopause
  1245.  
  1246.  move.b SLAVEPAUSE,d0
  1247.  or.b MASTERPAUSE,d0
  1248.  beq.s .nopause
  1249.  clr.b doanything
  1250.  
  1251.  move.l #KeyMap,a5
  1252. .waitrel:
  1253.  tst.b $19(a5)
  1254.  bne.s .waitrel
  1255.  
  1256.  bsr PAUSEOPTS
  1257.  
  1258.  cmp.b #'m',mors
  1259.  bne.s .slavelast
  1260.  Jsr SENDFIRST
  1261.  bra .masfirst
  1262. .slavelast
  1263.  Jsr RECFIRST
  1264. .masfirst:
  1265.  clr.b SLAVEPAUSE
  1266.  clr.b MASTERPAUSE
  1267.  st doanything
  1268.  
  1269. .nopause: 
  1270.  
  1271.  
  1272.  
  1273.  move.l drawpt,d0
  1274.  move.l olddrawpt,drawpt
  1275.  move.l d0,olddrawpt
  1276.  move.l d0,$dff084    
  1277.  move.l drawpt,a3
  1278. ; move.l COPSCRNBUFF,a3
  1279.  adda.w #10,a3
  1280.  move.l a3,frompt
  1281.  add.l #104*4*40,a3
  1282.  move.l a3,midpt
  1283.  
  1284.  cmp.b #'s',mors
  1285.  beq.s nowaitslave
  1286.  
  1287. waitfortop:
  1288.  
  1289.  btst.b #0,intreqrl(a6)
  1290.  beq.b waitfortop
  1291.  
  1292.  move.w #$1,intreq(a6)
  1293.  move.l #PLR1_GunData,GunData
  1294.  move.b PLR1_GunSelected,GunSelected
  1295.  bra waitmaster
  1296.  
  1297. nowaitslave:
  1298.  move.l #PLR2_GunData,GunData
  1299.  move.b PLR2_GunSelected,GunSelected
  1300. waitmaster:
  1301.  
  1302.  
  1303.  move.l waterpt,a0
  1304.  move.l (a0)+,watertouse
  1305.  cmp.l #endwaterlist,a0
  1306.  blt.s okwat
  1307.  move.l #waterlist,a0
  1308. okwat:
  1309.  move.l a0,waterpt
  1310.  
  1311.  add.w #640,wtan
  1312.  and.w #8191,wtan
  1313.  add.w #1,wateroff
  1314.  and.w #63,wateroff
  1315.  
  1316.  move.l GunData,a6
  1317.  moveq #0,d0
  1318.  move.b GunSelected,d0
  1319.  lsl.w #2,d0
  1320.  lea (a6,d0.w*8),a6
  1321.  move.w (a6),d0
  1322.  asr.w #3,d0
  1323.  move.w d0,Ammo
  1324.  
  1325.  move.l PLR1_xoff,OLDX1
  1326.  move.l PLR1_zoff,OLDZ1
  1327.  move.l PLR2_xoff,OLDX2
  1328.  move.l PLR2_zoff,OLDZ2
  1329.  
  1330.  
  1331.  
  1332.  move.l #$dff000,a6
  1333.  
  1334.  cmp.b #'s',mors
  1335.  beq ASlaveShouldWaitOnHisMaster
  1336.  
  1337.  cmp.b #'n',mors
  1338.  bne NotOnePlayer
  1339.  
  1340.  move.w PLR1_energy,Energy
  1341.  move.w FramesToDraw,TempFrames
  1342.  cmp.w #15,TempFrames
  1343.  blt.s .okframe
  1344.  move.w #15,TempFrames
  1345. .okframe:
  1346.  move.w #0,FramesToDraw
  1347.  
  1348. *********************************************
  1349. *********** TAKE THIS OUT *******************
  1350. *********************************************
  1351.  
  1352.  move.l #KeyMap,a5
  1353.  tst.b (a5)
  1354.  beq.s .nocheat
  1355.  move.w #127,PLR1_energy
  1356.  bsr EnergyBar
  1357. .nocheat
  1358. **********************************************
  1359. **********************************************
  1360. **********************************************
  1361.  
  1362.  move.l PLR1s_xoff,p1_xoff
  1363.  move.l PLR1s_zoff,p1_zoff
  1364.  move.l PLR1s_yoff,p1_yoff
  1365.  move.l PLR1s_height,p1_height
  1366.  move.w PLR1s_angpos,p1_angpos
  1367.  move.w PLR1_bobble,p1_bobble
  1368.  move.b PLR1_clicked,p1_clicked
  1369.  move.b PLR1_fire,p1_fire
  1370.  clr.b PLR1_clicked
  1371.  move.b PLR1_SPCTAP,p1_spctap
  1372.  clr.b PLR1_SPCTAP
  1373.  move.b PLR1_Ducked,p1_ducked
  1374.  move.b PLR1_GunSelected,p1_gunselected
  1375.  
  1376.  bsr PLR1_Control
  1377.  
  1378.  move.l PLR1_Roompt,a0
  1379.  move.l ToZoneRoof(a0),SplitHeight
  1380.  move.w p1_xoff,THISPLRxoff
  1381.  move.w p1_zoff,THISPLRzoff
  1382.  
  1383.  
  1384.  move.l #$60000,p2_yoff
  1385.  move.l PLR2_Obj,a0
  1386.  move.w #-1,GraphicRoom(a0)
  1387.  move.w #-1,12(a0)
  1388.  move.b #0,17(a0)
  1389.  move.l #BollocksRoom,PLR2_Roompt
  1390.  
  1391.  bra donetalking
  1392.  
  1393. NotOnePlayer:
  1394.  move.l #KeyMap,a5
  1395.  tst.b $19(a5)
  1396.  sne MASTERPAUSE
  1397.  
  1398. *********************************
  1399.  move.w PLR1_energy,Energy
  1400. ; change this back
  1401. *********************************
  1402.  
  1403.  jsr SENDFIRST
  1404.  
  1405.  move.w FramesToDraw,TempFrames
  1406.  cmp.w #15,TempFrames
  1407.  blt.s .okframe
  1408.  move.w #15,TempFrames
  1409. .okframe:
  1410.  move.w #0,FramesToDraw
  1411.  
  1412.  move.l PLR1s_xoff,p1_xoff
  1413.  move.l PLR1s_zoff,p1_zoff
  1414.  move.l PLR1s_yoff,p1_yoff
  1415.  move.l PLR1s_height,p1_height
  1416.  move.w PLR1s_angpos,p1_angpos
  1417.  move.w PLR1_bobble,p1_bobble
  1418.  move.b PLR1_clicked,p1_clicked
  1419.  clr.b PLR1_clicked
  1420.  move.b PLR1_fire,p1_fire
  1421.  move.b PLR1_SPCTAP,p1_spctap
  1422.  clr.b PLR1_SPCTAP
  1423.  move.b PLR1_Ducked,p1_ducked
  1424.  move.b PLR1_GunSelected,p1_gunselected
  1425.  
  1426.  move.l p1_xoff,d0
  1427.  jsr SENDFIRST
  1428.  move.l d0,p2_xoff
  1429.  
  1430.  move.l p1_zoff,d0
  1431.  jsr SENDFIRST
  1432.  move.l d0,p2_zoff 
  1433.  
  1434.  move.l p1_yoff,d0
  1435.  jsr SENDFIRST
  1436.  move.l d0,p2_yoff
  1437.   
  1438.  move.l p1_height,d0
  1439.  jsr SENDFIRST
  1440.  move.l d0,p2_height
  1441.  
  1442.  move.w p1_angpos,d0
  1443.  swap d0
  1444.  move.w p1_bobble,d0
  1445.  jsr SENDFIRST
  1446.  move.w d0,p2_bobble
  1447.  swap d0
  1448.  move.w d0,p2_angpos
  1449.  
  1450.  
  1451.  move.w TempFrames,d0
  1452.  swap d0
  1453.  move.b p1_spctap,d0
  1454.  lsl.w #8,d0
  1455.  move.b p1_clicked,d0
  1456.  jsr SENDFIRST
  1457.  move.b d0,p2_clicked
  1458.  lsr.w #8,d0
  1459.  move.b d0,p2_spctap
  1460.  
  1461.  
  1462.  move.w Rand1,d0
  1463.  swap d0
  1464.  move.b p1_ducked,d0
  1465.  lsl.w #8,d0
  1466.  move.b p1_gunselected,d0
  1467.  jsr SENDFIRST
  1468.  move.b d0,p2_gunselected
  1469.  lsr.w #8,d0
  1470.  move.b d0,p2_ducked
  1471.  
  1472.  move.b p1_fire,d0
  1473.  lsl.w #8,d0
  1474.  move.b MASTERQUITTING,d0
  1475.  or.b d0,SLAVEQUITTING
  1476.  swap d0
  1477.  move.b MASTERPAUSE,d0
  1478.  or.b d0,SLAVEPAUSE
  1479.  jsr SENDFIRST
  1480.  or.b d0,MASTERPAUSE
  1481.  or.b d0,SLAVEPAUSE
  1482.  swap d0
  1483.  or.b d0,SLAVEQUITTING
  1484.  or.b d0,MASTERQUITTING
  1485.  lsr.w #8,d0
  1486.  move.b d0,p2_fire
  1487.  
  1488.  bsr PLR1_Control
  1489.  bsr PLR2_Control
  1490.  move.l PLR1_Roompt,a0
  1491.  move.l ToZoneRoof(a0),SplitHeight
  1492.  move.w p1_xoff,THISPLRxoff
  1493.  move.w p1_zoff,THISPLRzoff
  1494.  
  1495.  bra donetalking
  1496.  
  1497. ASlaveShouldWaitOnHisMaster:
  1498.  
  1499.  move.l #KeyMap,a5
  1500.  tst.b $19(a5)
  1501.  sne SLAVEPAUSE
  1502.  
  1503.  
  1504.  move.w PLR2_energy,Energy
  1505.  
  1506.  jsr RECFIRST
  1507.  
  1508.  move.l PLR2s_xoff,p2_xoff
  1509.  move.l PLR2s_zoff,p2_zoff
  1510.  move.l PLR2s_yoff,p2_yoff
  1511.  move.l PLR2s_height,p2_height
  1512.  move.w PLR2s_angpos,p2_angpos
  1513.  move.w PLR2_bobble,p2_bobble
  1514.  move.b PLR2_clicked,p2_clicked
  1515.  clr.b PLR2_clicked
  1516.  move.b PLR2_fire,p2_fire
  1517.  move.b PLR2_SPCTAP,p2_spctap
  1518.  clr.b PLR2_SPCTAP
  1519.  move.b PLR2_Ducked,p2_ducked
  1520.  move.b PLR2_GunSelected,p2_gunselected
  1521.  
  1522.  move.l p2_xoff,d0
  1523.  jsr RECFIRST
  1524.  move.l d0,p1_xoff
  1525.  
  1526.  move.l p2_zoff,d0
  1527.  jsr RECFIRST
  1528.  move.l d0,p1_zoff
  1529.  
  1530.  move.l p2_yoff,d0
  1531.  jsr RECFIRST
  1532.  move.l d0,p1_yoff
  1533.  
  1534.  move.l p2_height,d0
  1535.  jsr RECFIRST
  1536.  move.l d0,p1_height
  1537.  
  1538.  move.w p2_angpos,d0
  1539.  swap d0
  1540.  move.w p2_bobble,d0
  1541.  jsr RECFIRST
  1542.  move.w d0,p1_bobble
  1543.  swap d0
  1544.  move.w d0,p1_angpos
  1545.  
  1546.  
  1547.  move.b p2_spctap,d0
  1548.  lsl.w #8,d0
  1549.  move.b p2_clicked,d0
  1550.  jsr RECFIRST
  1551.  move.b d0,p1_clicked
  1552.  lsr.w #8,d0
  1553.  move.b d0,p1_spctap
  1554.  swap d0
  1555.  move.w d0,TempFrames
  1556.  
  1557.  
  1558.  move.b p2_ducked,d0
  1559.  lsl.w #8,d0
  1560.  move.b p2_gunselected,d0
  1561.  jsr RECFIRST
  1562.  move.b d0,p1_gunselected
  1563.  lsr.w #8,d0
  1564.  move.b d0,p1_ducked
  1565.  swap d0
  1566.  move.w d0,Rand1
  1567.  
  1568.  move.b p2_fire,d0
  1569.  lsl.w #8,d0
  1570.  move.b SLAVEQUITTING,d0
  1571.  or.b d0,MASTERQUITTING
  1572.  swap d0
  1573.  move.b SLAVEPAUSE,d0
  1574.  or.b d0,MASTERPAUSE
  1575.  jsr RECFIRST
  1576.  or.b d0,MASTERPAUSE
  1577.  or.b d0,SLAVEPAUSE
  1578.  swap d0
  1579.  or.b d0,SLAVEQUITTING
  1580.  or.b d0,MASTERQUITTING
  1581.  lsr.w #8,d0
  1582.  move.b d0,p1_fire
  1583.  
  1584.  
  1585.  bsr PLR1_Control
  1586.  bsr PLR2_Control
  1587.  move.w p2_xoff,THISPLRxoff
  1588.  move.w p2_zoff,THISPLRzoff
  1589.  move.l PLR2_Roompt,a0
  1590.  move.l ToZoneRoof(a0),SplitHeight
  1591.  
  1592. donetalking:
  1593.  
  1594.  
  1595.  
  1596.  
  1597.  move.l #ZoneBrightTable,a1
  1598.  move.l ZoneAdds,a2
  1599.  move.l PLR2_ListOfGraphRooms,a0
  1600.  move.l PLR2_PointsToRotatePtr,a5
  1601.  cmp.b #'s',mors
  1602.  beq.s doallz
  1603.  move.l PLR1_ListOfGraphRooms,a0
  1604.  move.l PLR1_PointsToRotatePtr,a5
  1605.  
  1606. doallz
  1607.  move.w (a0),d0
  1608.  blt.s doneallz
  1609.  add.w #8,a0
  1610.  
  1611.  move.l (a2,d0.w*4),a3
  1612.  add.l LEVELDATA,a3
  1613.  move.w ToZoneBrightness(a3),d2
  1614.  
  1615.  blt.s justbright
  1616.  move.w d2,d3
  1617.  lsr.w #8,d3
  1618.  tst.b d3
  1619.  beq.s justbright
  1620.  
  1621.  move.l #BrightAnimTable,a4
  1622.  move.w -2(a4,d3.w*2),d2
  1623.  
  1624. justbright:
  1625.  move.w d2,(a1,d0.w*4)
  1626.  
  1627.  move.w ToUpperBrightness(a3),d2
  1628.  
  1629.  blt.s justbright2
  1630.  move.w d2,d3
  1631.  lsr.w #8,d3
  1632.  tst.b d3
  1633.  beq.s justbright2
  1634.  
  1635.  move.l #BrightAnimTable,a4
  1636.  move.w -2(a4,d3.w*2),d2
  1637.  
  1638. justbright2:
  1639.  move.w d2,2(a1,d0.w*4)
  1640.  
  1641.  bra doallz
  1642.  
  1643. doneallz:
  1644.  
  1645.  move.l PointBrights,a2
  1646.  move.l #CurrentPointBrights,a3
  1647. justtheone:
  1648.  move.w (a5)+,d0
  1649.  blt.s whythehell
  1650.  move.w (a2,d0.w*4),d2
  1651.  
  1652.  tst.b d2
  1653.  blt.s .justbright
  1654.  move.w d2,d3
  1655.  lsr.w #8,d3
  1656.  tst.b d3
  1657.  beq.s .justbright
  1658.  
  1659.  move.w d3,d4
  1660.  and.w #$f,d3
  1661.  lsr.w #4,d4
  1662.  add.w #1,d4
  1663.  
  1664.  move.l #BrightAnimTable,a0
  1665.  move.w -2(a0,d3.w*2),d3
  1666.  ext.w d2
  1667.  sub.w d2,d3
  1668.  muls d4,d3
  1669.  asr.w #4,d3
  1670.  add.w d3,d2
  1671.  
  1672. .justbright:
  1673.  ext.w d2
  1674.  
  1675.  move.w d2,(a3,d0.w*4)
  1676.  move.w 2(a2,d0.w*4),d2
  1677.  
  1678.  tst.b d2
  1679.  blt.s .justbright2
  1680.  move.w d2,d3
  1681.  lsr.w #8,d3
  1682.  tst.b d3
  1683.  beq.s .justbright2
  1684.  
  1685.  move.w d3,d4
  1686.  and.w #$f,d3
  1687.  lsr.w #4,d4
  1688.  add.w #1,d4
  1689.  
  1690.  move.l #BrightAnimTable,a0
  1691.  move.w -2(a0,d3.w*2),d3
  1692.  ext.w d2
  1693.  sub.w d2,d3
  1694.  muls d4,d3
  1695.  asr.w #4,d3
  1696.  add.w d3,d2
  1697.  
  1698. .justbright2:
  1699.  ext.w d2
  1700.  
  1701.  move.w d2,2(a3,d0.w*4)
  1702.  
  1703.  bra.s justtheone
  1704.  
  1705. whythehell:
  1706.  
  1707.  cmp.b #'n',mors
  1708.  beq nosee
  1709.  
  1710.  move.l PLR1_Roompt,FromRoom
  1711.  move.l PLR2_Roompt,ToRoom
  1712.  move.w p1_xoff,Viewerx
  1713.  move.w p1_zoff,Viewerz
  1714.  move.l p1_yoff,d0
  1715.  asr.l #7,d0
  1716.  move.w d0,Viewery
  1717.  move.w p2_xoff,Targetx
  1718.  move.w p2_zoff,Targetz
  1719.  move.l p2_yoff,d0
  1720.  asr.l #7,d0
  1721.  move.w d0,Targety
  1722.  move.b PLR1_StoodInTop,ViewerTop
  1723.  move.b PLR2_StoodInTop,TargetTop
  1724.  jsr CanItBeSeen
  1725.  
  1726.  move.l PLR1_Obj,a0
  1727.  move.b CanSee,d0
  1728.  and.b #2,d0
  1729.  move.b d0,17(a0)
  1730.  move.l PLR2_Obj,a0
  1731.  move.b CanSee,d0
  1732.  and.b #1,d0
  1733.  move.b d0,17(a0)
  1734.  
  1735. nosee:
  1736.  
  1737.  move.l PLR1_Obj,a0
  1738.  move.b #5,16(a0)
  1739.  move.l PLR2_Obj,a0
  1740.  move.b #11,16(a0)
  1741.  
  1742.  move.w TempFrames,d0
  1743.  add.w d0,p1_holddown
  1744.  cmp.w #30,p1_holddown
  1745.  blt.s oklength
  1746.  move.w #30,p1_holddown
  1747. oklength:
  1748.  
  1749.  tst.b p1_fire
  1750.  bne.s okstillheld
  1751.  sub.w d0,p1_holddown
  1752.  bge.s okstillheld
  1753.  move.w #0,p1_holddown
  1754.  
  1755. okstillheld:
  1756.  
  1757.  move.w TempFrames,d0
  1758.  add.w d0,p2_holddown
  1759.  
  1760.  cmp.w #30,p2_holddown
  1761.  blt.s oklength2
  1762.  move.w #30,p2_holddown
  1763. oklength2:
  1764.  
  1765.  
  1766.  tst.b p2_fire
  1767.  bne.s okstillheld2
  1768.  sub.w d0,p2_holddown
  1769.  bge.s okstillheld2
  1770.  move.w #0,p2_holddown
  1771. okstillheld2:
  1772.  
  1773. ; move.l #PLR1_GunData,a1
  1774. ; move.w p1_holddown,d0
  1775. ; move.w #50,10+32*3(a1)
  1776. ; move.l #PLR2_GunData,a1
  1777. ; move.w p2_holddown,d0
  1778. ; move.w #50,10+32*3(a1)
  1779.  
  1780.  
  1781. ******************************************
  1782. ******************************************
  1783.  
  1784.  move.w TempFrames,d1
  1785.  bgt.s noze
  1786.  moveq #1,d1
  1787. noze:
  1788.  
  1789.  move.w PLR1_xoff,d0
  1790.  sub.w OLDX1,d0
  1791.  asl.w #4,d0
  1792.  ext.l d0
  1793.  divs d1,d0
  1794.  move.w d0,XDIFF1
  1795.  move.w PLR2_xoff,d0
  1796.  sub.w OLDX2,d0
  1797.  asl.w #4,d0
  1798.  ext.l d0
  1799.  divs d1,d0
  1800.  move.w d0,XDIFF2
  1801.  move.w PLR1_zoff,d0
  1802.  sub.w OLDZ1,d0
  1803.  asl.w #4,d0
  1804.  ext.l d0
  1805.  divs d1,d0
  1806.  move.w d0,ZDIFF1
  1807.  move.w PLR2_zoff,d0
  1808.  sub.w OLDZ2,d0
  1809.  asl.w #4,d0
  1810.  ext.l d0
  1811.  divs d1,d0
  1812.  move.w d0,ZDIFF2
  1813.  
  1814.  cmp.b #'s',mors
  1815.  beq.s ImPlayer2OhYesIAm
  1816.  bsr USEPLR1
  1817.  bra IWasPlayer1
  1818.  
  1819. ImPlayer2OhYesIAm:
  1820.  bsr USEPLR2
  1821. IWasPlayer1:
  1822.  
  1823.  
  1824.  cmp.b #'s',mors
  1825.  beq drawplayer2
  1826.  
  1827.  move.w #0,scaleval
  1828.  
  1829.  move.l PLR1_xoff,xoff
  1830.  move.l PLR1_yoff,yoff
  1831.  move.l PLR1_zoff,zoff
  1832.  move.w PLR1_angpos,angpos
  1833.  move.w PLR1_cosval,cosval
  1834.  move.w PLR1_sinval,sinval
  1835.  
  1836.  
  1837.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1838.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1839.  move.l PLR1_Roompt,Roompt
  1840.  
  1841.  bsr OrderZones
  1842.  jsr objmoveanim
  1843.  bsr EnergyBar
  1844.  bsr AmmoBar
  1845.  
  1846.  move.w #0,leftclip
  1847.  move.w #96,rightclip
  1848.  move.w #0,deftopclip
  1849.  
  1850.  move.w #79,defbotclip
  1851.  move.w #0,topclip
  1852.  move.w #79,botclip
  1853. ; sub.l #10*104*4,frompt
  1854. ; sub.l #10*104*4,midpt
  1855.  
  1856. * Subroom loop
  1857.  
  1858.  
  1859.  bsr DrawDisplay 
  1860.  
  1861.  bra nodrawp2
  1862.  
  1863. drawplayer2
  1864.  
  1865.  move.w #0,scaleval
  1866.  move.l PLR2_xoff,xoff
  1867.  move.l PLR2_yoff,yoff
  1868.  move.l PLR2_zoff,zoff
  1869.  move.w PLR2_angpos,angpos
  1870.  move.w PLR2_cosval,cosval
  1871.  move.w PLR2_sinval,sinval 
  1872.  
  1873.  
  1874.  
  1875.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1876.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1877.  move.l PLR2_Roompt,Roompt
  1878.  
  1879.  bsr OrderZones
  1880.  jsr objmoveanim
  1881.  bsr EnergyBar
  1882.  bsr AmmoBar
  1883.  
  1884.  move.w #0,leftclip
  1885.  move.w #96,rightclip
  1886.  move.w #0,deftopclip
  1887.  move.w #79,defbotclip
  1888.  move.w #0,topclip
  1889.  move.w #79,botclip
  1890.  
  1891.  bsr DrawDisplay
  1892.  
  1893. nodrawp2:
  1894.  
  1895. ***************************************** 
  1896. * Copy from copbuff to chip ram
  1897.  
  1898.  
  1899. ; move.l drawpt,a3
  1900. ; adda.w #10,a3
  1901. ; move.l COPSCRNBUFF,a2
  1902. ; move.w #2,d6
  1903. ; adda.w #10,a2
  1904. ;COPYOUT
  1905. ; move.w #31,d0
  1906. ;COPYDOWN1:
  1907. ; move.w #3,d1
  1908. ; move.l a2,a4
  1909. ; move.l a3,a5
  1910. ;.inlop1:
  1911. ;val SET 0
  1912. ; REPT 20
  1913. ; move.w val(a4),val(a5)
  1914. ;val SET val+104*4
  1915. ; ENDR
  1916. ; adda.l #104*4*20,a4
  1917. ; adda.l #104*4*20,a5
  1918. ; dbra d1,.inlop1
  1919. ; addq #4,a2
  1920. ; addq #4,a3
  1921. ; dbra d0,COPYDOWN1
  1922. ; addq #4,a2
  1923. ; addq #4,a3
  1924. ; dbra d6,COPYOUT 
  1925.  
  1926.  
  1927. ***************************************** 
  1928.  move.l PLR2_Roompt,a0
  1929.  move.l #WorkSpace,a1
  1930.  clr.l (a1)
  1931.  clr.l 4(a1)
  1932.  clr.l 8(a1)
  1933.  clr.l 12(a1)
  1934.  clr.l 16(a1)
  1935.  clr.l 20(a1)
  1936.  clr.l 24(a1)
  1937.  clr.l 28(a1)
  1938.  
  1939.  cmp.b #'n',mors
  1940.  beq.s plr1only
  1941.  
  1942.  lea ToListOfGraph(a0),a0
  1943. .doallrooms:
  1944.  move.w (a0),d0
  1945.  blt.s .allroomsdone
  1946.  addq #8,a0
  1947.  move.w d0,d1
  1948.  asr.w #3,d0
  1949.  bset d1,(a1,d0.w)
  1950.  bra .doallrooms
  1951. .allroomsdone:
  1952.  
  1953. plr1only:
  1954.  
  1955.  move.l PLR1_Roompt,a0
  1956.  lea ToListOfGraph(a0),a0
  1957. .doallrooms2:
  1958.  move.w (a0),d0
  1959.  blt.s .allroomsdone2
  1960.  addq #8,a0
  1961.  move.w d0,d1
  1962.  asr.w #3,d0
  1963.  bset d1,(a1,d0.w)
  1964.  bra .doallrooms2
  1965. .allroomsdone2:
  1966.  
  1967.  move.l ObjectData,a0
  1968.  sub.w #64,a0
  1969. .doallobs:
  1970.  add.w #64,a0
  1971.  move.w (a0),d0
  1972.  blt.s .allobsdone
  1973.  move.w 12(a0),d0
  1974.  blt.s .doallobs
  1975.  move.w d0,d1
  1976.  asr.w #3,d0
  1977.  btst d1,(a1,d0.w)
  1978.  beq.s .doallobs
  1979.  or.b #127,worry(a0)
  1980.  bra.s .doallobs
  1981. .allobsdone:
  1982.  
  1983.  
  1984.  
  1985. ; move.l #brightentab,a0
  1986. ; move.l frompt,a3
  1987. ; adda.w #(4*33)+(104*4*20),a3
  1988. ; move.w #20,d7
  1989. ; move.w #20,d6
  1990. ;horl:
  1991. ; move.w d6,d5
  1992. ; move.l a3,a1
  1993. ;vertl
  1994. ; move.w (a1),d0
  1995. ; move.w (a0,d0.w*2),(a1)
  1996. ; addq #4,a1
  1997. ; dbra d5,vertl
  1998. ; adda.w #104*4,a3
  1999. ; dbra d7,horl
  2000.  
  2001.  move.l #$dff000,a6
  2002.  
  2003. ; move.w #$300,col0(a6)
  2004.  
  2005.  move.l #KeyMap,a5
  2006.  tst.b $45(a5)
  2007.  beq.s noend
  2008.  
  2009.  cmp.b #'s',mors
  2010.  beq plr2quit 
  2011.  
  2012.  st MASTERQUITTING
  2013.  bra noend
  2014.  
  2015. plr2quit:
  2016.  st SLAVEQUITTING
  2017. noend:
  2018.  
  2019.  tst.b MASTERQUITTING
  2020.  beq.s .noquit
  2021.  tst.b SLAVEQUITTING
  2022.  bne endnomusic
  2023. .noquit
  2024.  
  2025.  cmp.b #'n',mors
  2026.  bne.s .noexit
  2027.  move.l PLR1_Roompt,a0
  2028.  move.w (a0),d0
  2029.  move.w PLOPT,d1
  2030.  move.l #ENDZONES,a0
  2031.  cmp.w (a0,d1.w*2),d0
  2032.  beq end
  2033. .noexit:
  2034.  
  2035.  tst.w PLR1_energy
  2036.  ble end
  2037.  tst.w PLR2_energy
  2038.  ble end
  2039.  
  2040. ; move.l SwitchData,a0
  2041. ; tst.b 24+8(a0)
  2042. ; bne end
  2043.   
  2044.  JSR STOPTIMER
  2045.  
  2046.  bra lop
  2047.  
  2048. MASTERQUITTING: dc.b 0
  2049. SLAVEQUITTING: dc.b 0
  2050. MASTERPAUSE: dc.b 0
  2051. SLAVEPAUSE: dc.b 0
  2052.  
  2053. PAUSEOPTS:
  2054.  include "ab3:source/pauseopts"
  2055.  
  2056. ENDZONES:
  2057. ; LEVEL 1
  2058.  dc.w 132
  2059. ; LEVEL 2
  2060.  dc.w 149
  2061. ; LEVEL 3
  2062.  dc.w 155
  2063. ; LEVEL 4
  2064.  dc.w 107
  2065. ; LEVEL 5
  2066.  dc.w 67
  2067. ; LEVEL 6
  2068.  dc.w 132
  2069. ; LEVEL 7
  2070.  dc.w 203
  2071. ; LEVEL 8
  2072.  dc.w 166
  2073. ; LEVEL 9
  2074.  dc.w 118
  2075. ; LEVEL 10
  2076.  dc.w 102
  2077. ; LEVEL 11
  2078.  dc.w 103
  2079. ; LEVEL 12
  2080.  dc.w 2
  2081. ; LEVEL 13
  2082.  dc.w 98
  2083. ; LEVEL 14
  2084.  dc.w 0
  2085. ; LEVEL 15
  2086.  dc.w 148
  2087. ; LEVEL 16
  2088.  dc.w 103
  2089.  
  2090. ***************************************************************************
  2091. ***************************************************************************
  2092. ****************** End of Main Loop here ********************************** 
  2093. ***************************************************************************
  2094. ***************************************************************************
  2095.  
  2096. putinsmallscr:
  2097.  move.l #$1fe0000,statskip
  2098.  move.l #$1fe0000,statskip+4
  2099.  
  2100.  move.l #healthpal,a5
  2101.  move.l COPSCRN1,a0
  2102.  move.l COPSCRN2,a2
  2103.  move.w #scrheight-1,d0
  2104.  move.l #0,d6
  2105.  move.w #0,d3
  2106.  move.w #$2bdf,startwait
  2107.  move.w #$2d01,endwait
  2108. .fillcop
  2109.  move.w #$180,d1
  2110.  
  2111.  move.l a0,a1
  2112.  move.l a2,a3
  2113.  move.w #$10c,(a1)+
  2114.  move.w #$10c,(a3)+
  2115.  move.w d3,(a1)+
  2116.  move.w d3,(a3)+
  2117.  eor.w #$8000,d3
  2118.  
  2119.  move.w #$106,(a1)+
  2120.  move.w #$106,(a3)+
  2121.  move.w #$2c42,d5
  2122.  or.w d3,d5
  2123.  and.w #$fffe,d5
  2124.  move.w d5,(a1)+
  2125.  move.w d5,(a3)+
  2126.  bsr do32
  2127.  
  2128.  move.w #$106,(a1)+
  2129.  move.w #$106,(a3)+
  2130.  move.w #$4c42,d5
  2131.  or.w d3,d5
  2132.  and.w #$fffe,d5
  2133.  move.w d5,(a1)+
  2134.  move.w d5,(a3)+
  2135.  bsr do32
  2136.  
  2137.  move.w #$106,(a1)+
  2138.  move.w #$106,(a3)+
  2139.  move.w #$6c42,d5
  2140.  or.w d3,d5
  2141.  and.w #$fffe,d5
  2142.  move.w d5,(a1)+
  2143.  move.w d5,(a3)+
  2144.  bsr do32
  2145.  
  2146.  
  2147.  move.l #$1060c42,(a1)+
  2148.  move.l #$1060c42,(a3)+
  2149.  move.w #$19e,(a1)+
  2150.  move.w (a5),(a1)+
  2151.  move.w #$19e,(a3)+
  2152.  move.w (a5)+,(a3)+
  2153.  
  2154. **********************************
  2155.  
  2156.  adda.w #104*4,a0
  2157.  adda.w #104*4,a2
  2158.  dbra d0,.fillcop
  2159.  
  2160.  move.w #$48,fetchstart
  2161.  move.w #$88,fetchstop
  2162.  move.w #$2cb1,winstart
  2163.  move.w #$2c91,winstop
  2164.  move.w #-24,modulo
  2165.  move.w #-24,modulo+4
  2166.  
  2167.  move.l #nullspr,d0
  2168.  move.w d0,s4l
  2169.  move.w d0,s5l
  2170.  move.w d0,s6l
  2171.  move.w d0,s7l
  2172.  swap d0
  2173.  move.w d0,s4h
  2174.  move.w d0,s5h
  2175.  move.w d0,s6h
  2176.  move.w d0,s7h 
  2177.  
  2178.  move.l #borders,d0
  2179.  move.w d0,s0l
  2180.  swap d0
  2181.  move.w d0,s0h
  2182.  move.l #borders+2592,d0
  2183.  move.w d0,s1l
  2184.  swap d0
  2185.  move.w d0,s1h
  2186.  move.l #borders+2592*2,d0
  2187.  move.w d0,s2l
  2188.  swap d0
  2189.  move.w d0,s2h
  2190.  move.l #borders+2592*3,d0
  2191.  move.w d0,s3l
  2192.  swap d0
  2193.  move.w d0,s3h
  2194.  
  2195.  
  2196.  move.l #scrn+40,a0
  2197.  move.l #scrn+160,a1
  2198.  move.l #scrn+280,a2
  2199.  move.l #smallscrntab,a3
  2200.  move.w #191,d7    ; counter
  2201.  move.w #0,d1    ; xpos
  2202. .plotscrnloop:
  2203.  move.b (a3)+,d0
  2204.  move.w d1,d2
  2205.  asr.w #3,d2
  2206.  move.b d1,d3
  2207.  not.b d3
  2208.  bclr.b d3,-40(a0,d2.w)
  2209.  bclr.b d3,(a0,d2.w)
  2210.  bclr.b d3,40(a0,d2.w)
  2211.  bclr.b d3,-40(a1,d2.w)
  2212.  bclr.b d3,(a1,d2.w)
  2213.  bclr.b d3,40(a1,d2.w)
  2214.  bclr.b d3,-40(a2,d2.w)
  2215.  btst #0,d0
  2216.  beq.s .nobp1
  2217.  bset.b d3,-40(a0,d2.w)
  2218. .nobp1:
  2219.  btst #1,d0
  2220.  beq.s .nobp2
  2221.  bset.b d3,(a0,d2.w)
  2222. .nobp2:
  2223.  btst #2,d0
  2224.  beq.s .nobp3
  2225.  bset.b d3,40(a0,d2.w)
  2226. .nobp3:
  2227.  btst #3,d0
  2228.  beq.s .nobp4
  2229.  bset.b d3,-40(a1,d2.w)
  2230. .nobp4:
  2231.  btst #4,d0
  2232.  beq.s .nobp5
  2233.  bset.b d3,(a1,d2.w)
  2234. .nobp5:
  2235.  btst #5,d0
  2236.  beq.s .nobp6
  2237.  bset.b d3,40(a1,d2.w)
  2238. .nobp6:
  2239.  btst #6,d0
  2240.  beq.s .nobp7
  2241.  bset.b d3,-40(a2,d2.w)
  2242. .nobp7:
  2243.  
  2244.  addq #1,d1
  2245.  
  2246.  dbra d7,.plotscrnloop
  2247.  
  2248.  
  2249.  rts
  2250.  
  2251. putinlargescr:
  2252.  
  2253.  move.l #$1000000,statskip
  2254.  move.l #$fffffffe,statskip+4
  2255.  
  2256.  move.l #healthpal,a5
  2257.  move.l COPSCRN1,a0
  2258.  move.l COPSCRN2,a2
  2259.  move.w #scrheight-1,d0
  2260.  move.l #0,d6
  2261.  move.w #0,d3
  2262.  move.w #$29df,startwait
  2263.  move.w #$2b01,endwait
  2264. .fillcop
  2265.  move.w #$180,d1
  2266.  
  2267.  move.l a0,a1
  2268.  move.l a2,a3
  2269.  move.w #$10c,(a1)+
  2270.  move.w #$10c,(a3)+
  2271.  move.w d3,(a1)+
  2272.  move.w d3,(a3)+
  2273.  eor.w #$8000,d3
  2274.  
  2275.  move.w #$106,(a1)+
  2276.  move.w #$106,(a3)+
  2277.  move.w #$2c42,d5
  2278.  or.w d3,d5
  2279.  and.w #$fffe,d5
  2280.  move.w d5,(a1)+
  2281.  move.w d5,(a3)+
  2282.  bsr do32
  2283.  
  2284.  move.w #$106,(a1)+
  2285.  move.w #$106,(a3)+
  2286.  move.w #$4c42,d5
  2287.  or.w d3,d5
  2288.  and.w #$fffe,d5
  2289.  move.w d5,(a1)+
  2290.  move.w d5,(a3)+
  2291.  bsr do32
  2292.  
  2293.  move.w #$106,(a1)+
  2294.  move.w #$106,(a3)+
  2295.  move.w #$6c42,d5
  2296.  or.w d3,d5
  2297.  and.w #$fffe,d5
  2298.  move.w d5,(a1)+
  2299.  move.w d5,(a3)+
  2300.  bsr do32
  2301.  
  2302.  move.w startwait,(a1)+
  2303.  move.w #$fffe,(a1)+
  2304.  move.w endwait,(a1)+
  2305.  move.w #$ff00,(a1)+
  2306.  move.w startwait,(a3)+
  2307.  move.w #$fffe,(a3)+
  2308.  move.w endwait,(a3)+
  2309.  move.w #$ff00,(a3)+
  2310.  
  2311. ; move.l $1fe0000,(a1)+
  2312. ; move.l $1fe0000,(a3)+
  2313. ; move.l $1fe0000,(a1)+
  2314. ; move.l $1fe0000,(a3)+
  2315.  
  2316.  
  2317.  add.w #$300,startwait
  2318.  add.w #$300,endwait
  2319.  
  2320. ; move.l #$1060c42,(a1)+
  2321. ; move.l #$1060c42,(a3)+
  2322. ; move.w #$19e,(a1)+
  2323. ; move.w (a5),(a1)+
  2324. ; move.w #$19e,(a3)+
  2325. ; move.w (a5)+,(a3)+
  2326.  
  2327. **********************************
  2328.  
  2329.  adda.w #104*4,a0
  2330.  adda.w #104*4,a2
  2331.  dbra d0,.fillcop
  2332.  
  2333.  move.w #$38,fetchstart
  2334.  move.w #$b8,fetchstop
  2335.  move.w #$2c81,winstart
  2336.  move.w #$2cc1,winstop
  2337.  move.w #-40,modulo
  2338.  move.w #-40,modulo+4
  2339.  
  2340.  move.l #nullspr,d0
  2341.  move.w d0,s0l
  2342.  move.w d0,s1l
  2343.  move.w d0,s2l
  2344.  move.w d0,s3l
  2345.  move.w d0,s4l
  2346.  move.w d0,s5l
  2347.  move.w d0,s6l
  2348.  move.w d0,s7l
  2349.  swap d0
  2350.  move.w d0,s0h
  2351.  move.w d0,s1h
  2352.  move.w d0,s2h
  2353.  move.w d0,s3h
  2354.  move.w d0,s4h
  2355.  move.w d0,s5h
  2356.  move.w d0,s6h
  2357.  move.w d0,s7h 
  2358.  
  2359.  move.l #scrn+40,a0
  2360.  move.l #scrn+160,a1
  2361.  move.l #scrn+280,a2
  2362.  move.l #scrntab,a3
  2363.  move.w #319,d7    ; counter
  2364.  move.w #0,d1    ; xpos
  2365. .plotscrnloop:
  2366.  move.b (a3)+,d0
  2367.  move.w d1,d2
  2368.  asr.w #3,d2
  2369.  move.b d1,d3
  2370.  not.b d3
  2371.  bclr.b d3,-40(a0,d2.w)
  2372.  bclr.b d3,(a0,d2.w)
  2373.  bclr.b d3,40(a0,d2.w)
  2374.  bclr.b d3,-40(a1,d2.w)
  2375.  bclr.b d3,(a1,d2.w)
  2376.  bclr.b d3,40(a1,d2.w)
  2377.  bclr.b d3,-40(a2,d2.w)
  2378.  btst #0,d0
  2379.  beq.s .nobp1
  2380.  bset.b d3,-40(a0,d2.w)
  2381. .nobp1:
  2382.  btst #1,d0
  2383.  beq.s .nobp2
  2384.  bset.b d3,(a0,d2.w)
  2385. .nobp2:
  2386.  btst #2,d0
  2387.  beq.s .nobp3
  2388.  bset.b d3,40(a0,d2.w)
  2389. .nobp3:
  2390.  btst #3,d0
  2391.  beq.s .nobp4
  2392.  bset.b d3,-40(a1,d2.w)
  2393. .nobp4:
  2394.  btst #4,d0
  2395.  beq.s .nobp5
  2396.  bset.b d3,(a1,d2.w)
  2397. .nobp5:
  2398.  btst #5,d0
  2399.  beq.s .nobp6
  2400.  bset.b d3,40(a1,d2.w)
  2401. .nobp6:
  2402.  btst #6,d0
  2403.  beq.s .nobp7
  2404.  bset.b d3,-40(a2,d2.w)
  2405. .nobp7:
  2406.  
  2407.  addq #1,d1
  2408.  
  2409.  dbra d7,.plotscrnloop
  2410.  
  2411.  rts
  2412.  
  2413. CLEARKEYBOARD:
  2414.  move.l #KeyMap,a5
  2415.  moveq #0,d0
  2416.  move.w #15,d1
  2417. clrloo:
  2418.  move.l d0,(a5)+
  2419.  move.l d0,(a5)+
  2420.  move.l d0,(a5)+
  2421.  move.l d0,(a5)+
  2422.  dbra d1,clrloo
  2423.  rts
  2424.  
  2425. READCONTROLS: dc.w 0
  2426.  
  2427. tstststst: dc.w 0
  2428.  
  2429. BollocksRoom:
  2430.  dc.w -1
  2431.  ds.l 50
  2432.  
  2433. GUNYOFFS:
  2434.  dc.w 20
  2435.  dc.w 20
  2436.  dc.w 0
  2437.  dc.w 20
  2438.  dc.w 20
  2439.  dc.w 0
  2440.  dc.w 0
  2441.  dc.w 20
  2442.  
  2443. USEPLR1:
  2444.  
  2445. ***********************************
  2446.  
  2447.  move.l PLR1_Obj,a0 
  2448.  move.l ObjectPoints,a1
  2449.  move.l #ObjRotated,a2
  2450.  move.w (a0),d0
  2451.  move.l PLR1_xoff,(a1,d0.w*8)
  2452.  move.l PLR1_zoff,4(a1,d0.w*8)
  2453.  move.l PLR1_Roompt,a1
  2454.  
  2455.  moveq #0,d2
  2456.  move.b damagetaken(a0),d2
  2457.  beq .notbeenshot
  2458.  move.w #$f00,hitcol
  2459.  move.w #$f00,hitcol2
  2460.  sub.w d2,PLR1_energy
  2461.  movem.l d0-d7/a0-a6,-(a7)
  2462.  move.b #$fb,IDNUM
  2463.  move.w #19,Samplenum
  2464.  clr.b notifplaying
  2465.  move.w #0,Noisex
  2466.  move.w #0,Noisez
  2467.  move.w #100,Noisevol
  2468.  jsr MakeSomeNoise
  2469.  
  2470.  movem.l (a7)+,d0-d7/a0-a6
  2471.  
  2472. .notbeenshot
  2473.  move.b #0,damagetaken(a0)
  2474.  move.b PLR1_energy+1,numlives(a0)
  2475.  
  2476.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2477.  
  2478.  move.w (a1),12(a0)
  2479.  move.w (a1),d2
  2480.  move.l #ZoneBrightTable,a1
  2481.  move.l (a1,d2.w*4),d2
  2482.  tst.b PLR1_StoodInTop
  2483.  bne.s .okinbott
  2484.  swap d2
  2485. .okinbott:
  2486.  
  2487.  move.w d2,2(a0)
  2488.  
  2489.  move.l p1_yoff,d0
  2490.  move.l p1_height,d1
  2491.  asr.l #1,d1
  2492.  add.l d1,d0
  2493.  asr.l #7,d0
  2494.  move.w d0,4(a0)
  2495.  
  2496. ***********************************
  2497.  
  2498.  move.l PLR2_Obj,a0 
  2499.  
  2500.  move.w PLR2_angpos,d0
  2501.  and.w #8190,d0
  2502.  move.w d0,Facing(a0)
  2503.  
  2504.  jsr ViewpointToDraw
  2505.  asl.w #2,d0
  2506.  moveq #0,d1
  2507.  move.b p2_bobble,d1
  2508.  not.b d1
  2509.  lsr.b #3,d1
  2510.  and.b #$3,d1
  2511.  add.w d1,d0
  2512.  move.w d0,10(a0)
  2513.  move.w #10,8(a0)
  2514.  
  2515.  move.l ObjectPoints,a1
  2516.  move.l #ObjRotated,a2
  2517.  move.w (a0),d0
  2518.  move.l PLR2_xoff,(a1,d0.w*8)
  2519.  move.l PLR2_zoff,4(a1,d0.w*8)
  2520.  move.l PLR2_Roompt,a1
  2521.  
  2522.  moveq #0,d2
  2523.  move.b damagetaken(a0),d2
  2524.  beq .notbeenshot2
  2525.  sub.w d2,PLR2_energy
  2526. .notbeenshot2
  2527.  move.b #0,damagetaken(a0)
  2528.  move.b PLR2_energy+1,numlives(a0)
  2529.  
  2530.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2531.  
  2532.  move.w (a1),12(a0)
  2533.  move.w (a1),d2
  2534.  move.l #ZoneBrightTable,a1
  2535.  move.l (a1,d2.w*4),d2
  2536.  tst.b PLR2_StoodInTop
  2537.  bne.s .okinbott2
  2538.  swap d2
  2539. .okinbott2:
  2540.  
  2541.  move.w d2,2(a0)
  2542.  
  2543.  move.l p2_yoff,d0
  2544.  move.l p2_height,d1
  2545.  asr.l #1,d1
  2546.  add.l d1,d0
  2547.  asr.l #7,d0
  2548.  move.w d0,4(a0)
  2549.  
  2550. **********************************
  2551.  
  2552.  
  2553.  move.l PLR1_Obj,a0
  2554.  move.w #-1,12+128(a0)
  2555.  
  2556.  rts
  2557.  
  2558. DRAWINGUN:
  2559.  move.l #Objects+9*16,a0
  2560.  move.l 4(a0),a5    ; ptr
  2561.  move.l 8(a0),a2    ; frames
  2562.  move.l 12(a0),a4    ; pal
  2563.  move.l (a0),a0        ; wad
  2564.  
  2565.  move.l #GunAnims,a1
  2566.  move.l (a1,d0.w*8),a1
  2567.  move.w (a1,d1.w*2),d5    ; frame of anim
  2568.  
  2569.  move.l #GUNYOFFS,a1
  2570.  move.w (a1,d0.w*2),d7    ; yoff
  2571.  move.l frompt,a6
  2572.  move.w d7,d6
  2573.  muls #104*4,d6
  2574.  add.l d6,a6    ; screen pointer
  2575.  
  2576.  asl.w #2,d0
  2577.  add.w d5,d0    ; frame
  2578.  move.w (a2,d0.w*4),d1    ; xoff
  2579.  
  2580.  lea (a5,d1.w),a5    ; right ptr
  2581.  
  2582.  move.w #31,d0
  2583.  bsr DRAWCHUNK
  2584.  addq.w #4,a6
  2585.  move.w #31,d0
  2586.  bsr DRAWCHUNK
  2587.  addq.w #4,a6
  2588.  move.w #31,d0
  2589.  bsr DRAWCHUNK
  2590.  rts
  2591.  
  2592.  
  2593. DRAWCHUNK:
  2594.  move.w #78,d3
  2595.  sub.w d7,d3
  2596.  move.l a6,a3
  2597.  move.b (a5),d2
  2598.  move.l (a5)+,d1
  2599.  bne.s .noblank
  2600.  addq #4,a6
  2601.  dbra d0,DRAWCHUNK 
  2602.  rts
  2603.  
  2604. .noblank:
  2605.  and.l #$ffffff,d1
  2606.  lea (a0,d1.l),a1
  2607.  cmp.b #1,d2
  2608.  bgt.s thirdd
  2609.  beq.s secc
  2610. .drawdown:
  2611.  move.w (a1)+,d2
  2612.  and.w #%11111,d2
  2613.  beq.s .itsblank
  2614.  move.w (a4,d2.w*2),(a3)
  2615. .itsblank
  2616.  add.w #104*4,a3
  2617.  dbra d3,.drawdown
  2618.  
  2619.  addq #4,a6
  2620.  dbra d0,DRAWCHUNK
  2621.  rts
  2622.  
  2623. secc:
  2624. .drawdown:
  2625.  move.w (a1)+,d2
  2626.  lsr.w #5,d2
  2627.  and.w #%11111,d2
  2628.  beq.s .itsblank
  2629.  move.w (a4,d2.w*2),(a3)
  2630. .itsblank
  2631.  add.w #104*4,a3
  2632.  dbra d3,.drawdown
  2633.  
  2634.  addq #4,a6
  2635.  dbra d0,DRAWCHUNK
  2636.  rts
  2637.  
  2638. thirdd:
  2639. .drawdown:
  2640.  move.b (a1),d2
  2641.  addq #2,a1
  2642.  lsr.b #2,d2
  2643.  and.w #%11111,d2
  2644.  beq.s .itsblank
  2645.  move.w (a4,d2.w*2),(a3)
  2646. .itsblank
  2647.  add.w #104*4,a3
  2648.  dbra d3,.drawdown
  2649.  
  2650.  addq #4,a6
  2651.  dbra d0,DRAWCHUNK
  2652.  rts
  2653.  
  2654.  
  2655.  
  2656. ***************************************************
  2657. **************************************************
  2658.  
  2659. USEPLR2:
  2660.  
  2661. ***********************************
  2662.  
  2663.  move.l PLR2_Obj,a0 
  2664.  move.l ObjectPoints,a1
  2665.  move.l #ObjRotated,a2
  2666.  move.w (a0),d0
  2667.  move.l PLR2_xoff,(a1,d0.w*8)
  2668.  move.l PLR2_zoff,4(a1,d0.w*8)
  2669.  move.l PLR2_Roompt,a1
  2670.  
  2671.  moveq #0,d2
  2672.  move.b damagetaken(a0),d2
  2673.  beq .notbeenshot
  2674.  move.w #$f00,hitcol
  2675.  move.w #$f00,hitcol2
  2676.  sub.w d2,PLR2_energy
  2677.  movem.l d0-d7/a0-a6,-(a7)
  2678.  move.w #19,Samplenum
  2679.  clr.b notifplaying
  2680.  move.b #$fb,IDNUM
  2681.  move.w #0,Noisex
  2682.  move.w #0,Noisez
  2683.  move.w #100,Noisevol
  2684.  jsr MakeSomeNoise
  2685.  
  2686.  movem.l (a7)+,d0-d7/a0-a6
  2687.  
  2688. .notbeenshot
  2689.  move.b #0,damagetaken(a0)
  2690.  move.b PLR2_energy+1,numlives(a0)
  2691.  
  2692.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2693.  
  2694.  move.w (a1),12(a0)
  2695.  move.w (a1),d2
  2696.  move.l #ZoneBrightTable,a1
  2697.  move.l (a1,d2.w*4),d2
  2698.  tst.b PLR2_StoodInTop
  2699.  bne.s .okinbott
  2700.  swap d2
  2701. .okinbott:
  2702.  
  2703.  move.w d2,2(a0)
  2704.  
  2705.  move.l PLR2_yoff,d0
  2706.  move.l p2_height,d1
  2707.  asr.l #1,d1
  2708.  add.l d1,d0
  2709.  asr.l #7,d0
  2710.  move.w d0,4(a0)
  2711.  
  2712. ***********************************
  2713.  
  2714.  move.l PLR1_Obj,a0 
  2715.  
  2716.  move.w PLR1_angpos,d0
  2717.  and.w #8190,d0
  2718.  move.w d0,Facing(a0)
  2719.  
  2720.  jsr ViewpointToDraw
  2721.  asl.w #2,d0
  2722.  moveq #0,d1
  2723.  move.b p1_bobble,d1
  2724.  not.b d1
  2725.  lsr.b #3,d1
  2726.  and.b #$3,d1
  2727.  add.w d1,d0
  2728.  move.w d0,10(a0)
  2729.  move.w #10,8(a0)
  2730.  
  2731.  move.l ObjectPoints,a1
  2732.  move.l #ObjRotated,a2
  2733.  move.w (a0),d0
  2734.  move.l PLR1_xoff,(a1,d0.w*8)
  2735.  move.l PLR1_zoff,4(a1,d0.w*8)
  2736.  move.l PLR1_Roompt,a1
  2737.  
  2738.  moveq #0,d2
  2739.  move.b damagetaken(a0),d2
  2740.  beq .notbeenshot2
  2741.  sub.w d2,PLR1_energy
  2742. .notbeenshot2
  2743.  move.b #0,damagetaken(a0)
  2744.  move.b PLR1_energy+1,numlives(a0)
  2745.  
  2746.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2747.  
  2748.  move.w (a1),12(a0)
  2749.  move.w (a1),d2
  2750.  move.l #ZoneBrightTable,a1
  2751.  move.l (a1,d2.w*4),d2
  2752.  tst.b PLR1_StoodInTop
  2753.  bne.s .okinbott2
  2754.  swap d2
  2755. .okinbott2:
  2756.  
  2757.  move.w d2,2(a0)
  2758.  
  2759.  move.l PLR1_yoff,d0
  2760.  move.l p1_height,d1
  2761.  asr.l #1,d1
  2762.  add.l d1,d0
  2763.  asr.l #7,d0
  2764.  move.w d0,4(a0)
  2765.  
  2766. **********************************
  2767.  
  2768.  move.l PLR2_Obj,a0
  2769.  move.w #-1,12+64(a0)
  2770.  
  2771.  rts
  2772.  
  2773.  
  2774. GunSelected: dc.b 0
  2775.  even
  2776.  
  2777. GunAnims:
  2778.  dc.l MachineAnim,3
  2779.  dc.l PlasmaAnim,5
  2780.  dc.l RocketAnim,5
  2781.  dc.l FlameThrowerAnim,5
  2782.  dc.l GrenadeAnim,12
  2783.  dc.l 0,0
  2784.  dc.l 0,0
  2785.  dc.l ShotGunAnim,12+19+11+20+1
  2786.  
  2787. MachineAnim:
  2788.  dc.w 0,1,2,3
  2789. PlasmaAnim:
  2790.  dc.w 0,1,2,3,3,3
  2791. RocketAnim:
  2792.  dc.w 0,1,2,3,3,3
  2793. FlameThrowerAnim:
  2794.  dc.w 0,1,2,3,3,3
  2795. GrenadeAnim:
  2796.  dc.w 0,1,1,1,1
  2797.  dc.w 2,2,2,2,3
  2798.  dc.w 3,3,3
  2799. ShotGunAnim:
  2800.  dc.w 0
  2801.  dcb.w 12,2
  2802.  dcb.w 19,1
  2803.  dcb.w 11,2
  2804.  dcb.w 20,0
  2805.  dc.w 3
  2806.  
  2807. GunData: dc.l 0
  2808.  
  2809. PLR1_GunData:
  2810. ; 0=Pistol 1=Big Gun
  2811. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2812.  
  2813. ; VISIBLE/INSTANT (0/FF)
  2814. ; damage,gotgun(b)
  2815. ; Delay (w), Lifetime of bullet (w)
  2816. ; Click or hold down (0,1)
  2817. ; BulSpd: (w)
  2818.  
  2819. ;0
  2820.  dc.w 0
  2821. ;2
  2822.  dc.b 8,3
  2823. ;4
  2824.  dc.b 15
  2825. ;5
  2826.  dc.b -1
  2827. ;6
  2828.  dc.b 4,$ff
  2829. ;8
  2830.  dc.w 5,-1,1,0
  2831. ;16
  2832.  dc.w 0,0,0
  2833. ;22
  2834.  dc.w 1
  2835.  
  2836.  ds.w 4
  2837.  
  2838. ;PlasmaGun
  2839.  
  2840.  dc.w 0
  2841.  dc.b 8,1
  2842.  dc.b 20
  2843.  dc.b 0
  2844.  dc.b 16,0
  2845.  dc.w 10,-1,0,5
  2846.  dc.w 0,0,0
  2847.  dc.w 1
  2848.  
  2849.  ds.w 4
  2850.  
  2851. ;RocketLauncher
  2852.  
  2853.  dc.w 0
  2854.  dc.b 8,9
  2855.  dc.b 2
  2856.  dc.b 0
  2857.  dc.b 12,0
  2858.  dc.w 30,-1,0,5
  2859.  dc.w 0,0,0
  2860.  dc.w 1
  2861.  
  2862.  
  2863.  ds.w 4
  2864.  
  2865. ; FlameThrower
  2866.  
  2867.  dc.w 90*8
  2868.  dc.b 1,22
  2869.  dc.b 40
  2870.  dc.b 0
  2871.  dc.b 8,$0    
  2872.  dc.w 5,50,1,4
  2873.  dc.w 0,0,0
  2874.  dc.w 1
  2875.  
  2876.  ds.w 4
  2877.  
  2878. ;Grenade launcher
  2879.  
  2880.  
  2881.  dc.w 0
  2882.  dc.b 8,9
  2883.  dc.b 6
  2884.  dc.b 0
  2885.  dc.b 8,0
  2886.  dc.w 50,100,1,5
  2887.  dc.w 60,3
  2888.  dc.w -1000
  2889.  dc.w 1
  2890.  
  2891.  ds.w 4
  2892.  
  2893. ; WORMGUN
  2894.  
  2895.  dc.w 0
  2896.  dc.b 0,0
  2897.  dc.b 0
  2898.  dc.b 0,0
  2899.  dc.w 0,-1,0,5
  2900.  dc.w 0,0
  2901.  dc.w 0
  2902.  dc.w 1
  2903.  ds.w 4
  2904.  
  2905. ; ToughMarineGun
  2906.  
  2907.  dc.w 0
  2908.  dc.b 0,0
  2909.  dc.b 0
  2910.  dc.b 0,0
  2911.  dc.w 0,-1,0,5
  2912.  dc.w 0,0
  2913.  dc.w 0
  2914.  dc.w 1
  2915.  ds.w 4
  2916.  
  2917. ; Shotgun
  2918.  
  2919. ;0
  2920.  dc.w 0
  2921. ;2
  2922.  dc.b 8,21
  2923. ;4
  2924.  dc.b 15
  2925. ;5
  2926.  dc.b -1
  2927. ;6
  2928.  dc.b 4,0
  2929. ;8
  2930.  dc.w 50,-1,1,0
  2931. ;16
  2932.  dc.w 0,0,0
  2933. ;22
  2934.  dc.w 7
  2935.  
  2936.  ds.w 4
  2937.  
  2938. PLR2_GunData:
  2939. ; 0=Pistol 1=Big Gun
  2940. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2941.  
  2942. ; VISIBLE/INSTANT (0/FF)
  2943. ; damage,gotgun(b)
  2944. ; Delay (w)
  2945.  
  2946. ;0
  2947.  dc.w 0
  2948. ;2
  2949.  dc.b 8,3
  2950. ;4
  2951.  dc.b 15
  2952. ;5
  2953.  dc.b -1
  2954. ;6
  2955.  dc.b 4,$ff
  2956. ;8
  2957.  dc.w 5,-1,1,0
  2958. ;16
  2959.  dc.w 0,0,0
  2960. ;22
  2961.  dc.w 1
  2962.  
  2963.  ds.w 4
  2964.  
  2965. ;PlasmaGun
  2966.  
  2967.  dc.w 0
  2968.  dc.b 8,1
  2969.  dc.b 20
  2970.  dc.b 0
  2971.  dc.b 16,0
  2972.  dc.w 10,-1,0,5
  2973.  dc.w 0,0,0
  2974.  dc.w 1
  2975.  
  2976.  ds.w 4
  2977.  
  2978. ;RocketLauncher
  2979.  
  2980.  dc.w 0
  2981.  dc.b 8,9
  2982.  dc.b 2
  2983.  dc.b 0
  2984.  dc.b 12,0
  2985.  dc.w 30,-1,0,5
  2986.  dc.w 0,0,0
  2987.  dc.w 1
  2988.  
  2989.  
  2990.  ds.w 4
  2991.  
  2992. ; FlameThrower
  2993.  
  2994.  dc.w 90*8
  2995.  dc.b 1,22
  2996.  dc.b 40
  2997.  dc.b 0
  2998.  dc.b 8,$0    
  2999.  dc.w 5,50,1,4
  3000.  dc.w 0,0,0
  3001.  dc.w 1
  3002.  
  3003.  ds.w 4
  3004.  
  3005. ;Grenade launcher
  3006.  
  3007.  
  3008.  dc.w 0
  3009.  dc.b 8,9
  3010.  dc.b 6
  3011.  dc.b 0
  3012.  dc.b 8,0
  3013.  dc.w 50,100,1,5
  3014.  dc.w 60,3
  3015.  dc.w -1000
  3016.  dc.w 1
  3017.  
  3018.  ds.w 4
  3019.  
  3020. ; WORMGUN
  3021.  
  3022.  dc.w 0
  3023.  dc.b 0,0
  3024.  dc.b 0
  3025.  dc.b 0,0
  3026.  dc.w 0,-1,0,5
  3027.  dc.w 0,0
  3028.  dc.w 0
  3029.  dc.w 1
  3030.  ds.w 4
  3031.  
  3032. ; ToughMarineGun
  3033.  
  3034.  dc.w 0
  3035.  dc.b 0,0
  3036.  dc.b 0
  3037.  dc.b 0,0
  3038.  dc.w 0,-1,0,5
  3039.  dc.w 0,0
  3040.  dc.w 0
  3041.  dc.w 1
  3042.  ds.w 4
  3043.  
  3044. ; Shotgun
  3045.  
  3046. ;0
  3047.  dc.w 0
  3048. ;2
  3049.  dc.b 8,21
  3050. ;4
  3051.  dc.b 15
  3052. ;5
  3053.  dc.b -1
  3054. ;6
  3055.  dc.b 4,0
  3056. ;8
  3057.  dc.w 50,-1,1,0
  3058. ;16
  3059.  dc.w 0,0,0
  3060. ;22
  3061.  dc.w 7
  3062.  
  3063.  ds.w 4
  3064.  
  3065.  
  3066.  
  3067. protA: dc.w 0
  3068.  
  3069. Path:
  3070. ; incbin "testpath"
  3071. endpath:
  3072. pathpt: dc.l Path
  3073.  
  3074.  
  3075. PLR1KEYS: dc.b 0
  3076. PLR1PATH: dc.b 0
  3077. PLR1MOUSE: dc.b -1
  3078. PLR1JOY: dc.b 0
  3079. PLR2KEYS: dc.b 0
  3080. PLR2PATH: dc.b 0
  3081. PLR2MOUSE: dc.b -1
  3082. PLR2JOY: dc.b 0
  3083.  
  3084.  even
  3085.  
  3086. PLR1_bobble: dc.w 0
  3087. PLR2_bobble: dc.w 0
  3088. xwobble: dc.l 0
  3089. xwobxoff: dc.w 0
  3090.  
  3091. xwobzoff: dc.w 0
  3092.  
  3093. PLR1_Control:
  3094.  
  3095. ; Take a snapshot of everything.
  3096.  
  3097.  move.l PLR1_xoff,d2
  3098.  move.l d2,PLR1_oldxoff
  3099.  move.l d2,oldx
  3100.  move.l PLR1_zoff,d3
  3101.  move.l d3,PLR1_oldzoff
  3102.  move.l d3,oldz
  3103.  move.l p1_xoff,d0
  3104.  move.l d0,PLR1_xoff
  3105.  move.l d0,newx
  3106.  move.l p1_zoff,d1
  3107.  move.l d1,newz
  3108.  move.l d1,PLR1_zoff
  3109.  
  3110.  move.l p1_height,PLR1_height
  3111.  
  3112.  sub.l d2,d0
  3113.  sub.l d3,d1
  3114.  move.l d0,xdiff
  3115.  move.l d1,zdiff
  3116.  move.w p1_angpos,d0
  3117.  move.w d0,PLR1_angpos
  3118.  
  3119.  move.l #SineTable,a1
  3120.  move.w (a1,d0.w),PLR1_sinval
  3121.  add.w #2048,d0
  3122.  and.w #8190,d0
  3123.  move.w (a1,d0.w),PLR1_cosval
  3124.  
  3125.  move.l p1_yoff,d0
  3126.  move.w p1_bobble,d1
  3127.  move.w (a1,d1.w),d1
  3128.  move.w d1,d3
  3129.  ble.s notnegative
  3130.  neg.w d1
  3131. notnegative:
  3132.  add.w #16384,d1
  3133.  asr.w #4,d1
  3134.  
  3135.  tst.b PLR1_Ducked
  3136.  bne.s .notdouble
  3137.  add.w d1,d1
  3138. .notdouble
  3139.  ext.l d1
  3140.  move.l PLR1_height,d4
  3141.  sub.l d1,d4
  3142.  add.l d1,d0
  3143.  
  3144.  cmp.b #'s',mors
  3145.  beq.s .otherwob
  3146.  asr.w #6,d3
  3147.  ext.l d3
  3148.  move.l d3,xwobble
  3149.  move.w PLR1_sinval,d1
  3150.  muls d3,d1
  3151.  move.w PLR1_cosval,d2
  3152.  muls d3,d2
  3153.  swap d1
  3154.  swap d2
  3155.  asr.w #7,d1
  3156.  move.w d1,xwobxoff
  3157.  asr.w #7,d2
  3158.  neg.w d2
  3159.  move.w d2,xwobzoff
  3160. .otherwob
  3161.  
  3162.  move.l d0,PLR1_yoff
  3163.  move.l d0,newy
  3164.  move.l d0,oldy
  3165.  
  3166.  move.l d4,thingheight
  3167.  move.l #40*256,StepUpVal
  3168.  tst.b PLR1_Ducked
  3169.  beq.s .okbigstep
  3170.  move.l #10*256,StepUpVal
  3171. .okbigstep:
  3172.  
  3173.  move.l #$1000000,StepDownVal
  3174.  
  3175.  move.l PLR1_Roompt,a0
  3176.  move.w ToTelZone(a0),d0
  3177.  blt .noteleport
  3178.  
  3179.  move.w ToTelX(a0),newx
  3180.  move.w ToTelZ(a0),newz
  3181.  move.w #-1,CollId
  3182.  move.l #%111111111111111111,CollideFlags
  3183.  bsr Collision
  3184.  tst.b hitwall
  3185.  beq.s .teleport
  3186.  
  3187.  move.w PLR1_xoff,newx
  3188.  move.w PLR1_zoff,newz
  3189.  bra .noteleport
  3190.  
  3191. .teleport:
  3192.  
  3193.  move.l PLR1_Roompt,a0
  3194.  move.w ToTelZone(a0),d0
  3195.  move.w ToTelX(a0),PLR1_xoff
  3196.  move.w ToTelZ(a0),PLR1_zoff
  3197.  move.l PLR1_yoff,d1
  3198.  sub.l ToZoneFloor(a0),d1
  3199.  move.l ZoneAdds,a0
  3200.  move.l (a0,d0.w*4),a0
  3201.  add.l LEVELDATA,a0
  3202.  move.l a0,PLR1_Roompt
  3203.  add.l ToZoneFloor(a0),d1
  3204.  move.l d1,PLR1s_yoff
  3205.  move.l d1,PLR1_yoff
  3206.  move.l d1,PLR1s_tyoff
  3207.  move.l PLR1_xoff,PLR1s_xoff
  3208.  move.l PLR1_zoff,PLR1s_zoff
  3209.  
  3210.  SAVEREGS
  3211.  move.w #0,Noisex
  3212.  move.w #0,Noisez
  3213.  move.w #26,Samplenum
  3214.  move.w #100,Noisevol
  3215.  move.b #$fa,IDNUM
  3216.  jsr MakeSomeNoise
  3217.  GETREGS
  3218.  
  3219.  bra .cantmove
  3220.  
  3221. .noteleport:
  3222.  
  3223.  move.l PLR1_Roompt,objroom
  3224.  move.w #%100000000,wallflags
  3225.  move.b PLR1_StoodInTop,StoodInTop
  3226.  
  3227.  move.l #%1011111110111000001,CollideFlags
  3228.  move.w #-1,CollId
  3229.  
  3230.  bsr Collision
  3231.  tst.b hitwall
  3232.  beq.s .nothitanything
  3233.  move.w oldx,PLR1_xoff
  3234.  move.w oldz,PLR1_zoff
  3235.  move.l PLR1_xoff,PLR1s_xoff
  3236.  move.l PLR1_zoff,PLR1s_zoff
  3237.  bra .cantmove
  3238. .nothitanything:
  3239.  
  3240.  move.w #40,extlen
  3241.  move.b #0,awayfromwall
  3242.  
  3243.  clr.b exitfirst
  3244.  clr.b wallbounce
  3245.  bsr MoveObject
  3246.  move.b StoodInTop,PLR1_StoodInTop
  3247.  move.l objroom,PLR1_Roompt
  3248.  move.w newx,PLR1_xoff
  3249.  move.w newz,PLR1_zoff
  3250.  move.l PLR1_xoff,PLR1s_xoff
  3251.  move.l PLR1_zoff,PLR1s_zoff
  3252.  
  3253. .cantmove:
  3254.  
  3255.  move.l PLR1_Roompt,a0
  3256.  
  3257.  move.l ToZoneFloor(a0),d0
  3258.  tst.b PLR1_StoodInTop
  3259.  beq.s notintop
  3260.  move.l ToUpperFloor(a0),d0
  3261. notintop:
  3262.  
  3263.  adda.w #ToZonePts,a0
  3264.  sub.l PLR1_height,d0
  3265.  move.l d0,PLR1s_tyoff
  3266.  move.w p1_angpos,tmpangpos
  3267.  
  3268. ; move.l (a0),a0        ; jump to viewpoint list
  3269.  * A0 is pointing at a pointer to list of points to rotate
  3270.  move.w (a0)+,d1
  3271.  ext.l d1
  3272.  add.l PLR1_Roompt,d1
  3273.  move.l d1,PLR1_PointsToRotatePtr
  3274.  tst.w (a0)+
  3275.  sne.s DRAWNGRAPHTOP
  3276.  beq.s nobackgraphics
  3277.  cmp.b #'s',mors
  3278.  beq.s nobackgraphics
  3279.  move.l a0,-(a7)
  3280.  jsr putinbackdrop 
  3281.  move.l (a7)+,a0
  3282. nobackgraphics:
  3283.  adda.w #10,a0
  3284.  move.l a0,PLR1_ListOfGraphRooms
  3285.  
  3286. *************************************************
  3287.  rts
  3288.  
  3289. DRAWNGRAPHTOP
  3290.  
  3291. tstzone: dc.l 0
  3292. CollId: dc.w 0
  3293.  
  3294. PLR2_Control:
  3295.  
  3296. ; Take a snapshot of everything.
  3297.  
  3298.  move.l PLR2_xoff,d2
  3299.  move.l d2,PLR2_oldxoff
  3300.  move.l d2,oldx
  3301.  move.l PLR2_zoff,d3
  3302.  move.l d3,PLR2_oldzoff
  3303.  move.l d3,oldz
  3304.  move.l p2_xoff,d0
  3305.  move.l d0,PLR2_xoff
  3306.  move.l d0,newx
  3307.  move.l p2_zoff,d1
  3308.  move.l d1,newz
  3309.  move.l d1,PLR2_zoff
  3310.  
  3311.  move.l p2_height,PLR2_height
  3312.  
  3313.  sub.l d2,d0
  3314.  sub.l d3,d1
  3315.  move.l d0,xdiff
  3316.  move.l d1,zdiff
  3317.  move.w p2_angpos,d0
  3318.  move.w d0,PLR2_angpos
  3319.  
  3320.  move.l #SineTable,a1
  3321.  move.w (a1,d0.w),PLR2_sinval
  3322.  add.w #2048,d0
  3323.  and.w #8190,d0
  3324.  move.w (a1,d0.w),PLR2_cosval
  3325.  
  3326.  move.l p2_yoff,d0
  3327.  move.w p2_bobble,d1
  3328.  move.w (a1,d1.w),d1
  3329.  move.w d1,d3
  3330.  ble.s .notnegative
  3331.  neg.w d1
  3332. .notnegative:
  3333.  add.w #16384,d1
  3334.  asr.w #4,d1
  3335.  add.w d1,d1
  3336.  ext.l d1
  3337.  move.l PLR2_height,d4
  3338.  sub.l d1,d4
  3339.  add.l d1,d0
  3340.  
  3341.  cmp.b #'s',mors
  3342.  bne.s .otherwob
  3343.  asr.w #6,d3
  3344.  ext.l d3
  3345.  move.l d3,xwobble
  3346.  move.w PLR2_sinval,d1
  3347.  muls d3,d1
  3348.  move.w PLR2_cosval,d2
  3349.  muls d3,d2
  3350.  swap d1
  3351.  swap d2
  3352.  asr.w #7,d1
  3353.  move.w d1,xwobxoff
  3354.  asr.w #7,d2
  3355.  neg.w d2
  3356.  move.w d2,xwobzoff
  3357. .otherwob
  3358.  
  3359.  move.l d0,PLR2_yoff
  3360.  move.l d0,newy
  3361.  move.l d0,oldy
  3362.  
  3363.  move.l d4,thingheight
  3364.  move.l #40*256,StepUpVal
  3365.  tst.b PLR2_Ducked
  3366.  beq.s .okbigstep
  3367.  move.l #10*256,StepUpVal
  3368. .okbigstep:
  3369.  
  3370.  move.l #$1000000,StepDownVal
  3371.  
  3372.  move.l PLR2_Roompt,a0
  3373.  move.w ToTelZone(a0),d0
  3374.  blt .noteleport
  3375.  
  3376.  move.w ToTelX(a0),newx
  3377.  move.w ToTelZ(a0),newz
  3378.  move.w #-1,CollId
  3379.  move.l #%111111111111111111,CollideFlags
  3380.  bsr Collision
  3381.  tst.b hitwall
  3382.  beq.s .teleport
  3383.  
  3384.  move.w PLR2_xoff,newx
  3385.  move.w PLR2_zoff,newz
  3386.  bra .noteleport
  3387.  
  3388. .teleport:
  3389.  
  3390.  move.l PLR2_Roompt,a0
  3391.  move.w ToTelZone(a0),d0
  3392.  move.w ToTelX(a0),PLR2_xoff
  3393.  move.w ToTelZ(a0),PLR2_zoff
  3394.  move.l PLR2_yoff,d1
  3395.  sub.l ToZoneFloor(a0),d1
  3396.  move.l ZoneAdds,a0
  3397.  move.l (a0,d0.w*4),a0
  3398.  add.l LEVELDATA,a0
  3399.  move.l a0,PLR2_Roompt
  3400.  add.l ToZoneFloor(a0),d1
  3401.  move.l d1,PLR2s_yoff
  3402.  move.l d1,PLR2_yoff
  3403.  move.l d1,PLR2s_tyoff
  3404.  move.l PLR2_xoff,PLR2s_xoff
  3405.  move.l PLR2_zoff,PLR2s_zoff
  3406.  
  3407.  SAVEREGS
  3408.  move.w #0,Noisex
  3409.  move.w #0,Noisez
  3410.  move.w #26,Samplenum
  3411.  move.w #100,Noisevol
  3412.  move.b #$fa,IDNUM
  3413.  jsr MakeSomeNoise
  3414.  GETREGS
  3415.  
  3416.  bra .cantmove
  3417.  
  3418. .noteleport:
  3419.  
  3420.  move.l PLR2_Roompt,objroom
  3421.  move.w #%100000000000,wallflags
  3422.  move.b PLR2_StoodInTop,StoodInTop
  3423.  
  3424.  move.l #%1011111010111100001,CollideFlags
  3425.  move.w #-1,CollId
  3426.  
  3427.  bsr Collision
  3428.  tst.b hitwall
  3429.  beq.s .nothitanything
  3430.  move.w oldx,PLR2_xoff
  3431.  move.w oldz,PLR2_zoff
  3432.  move.l PLR2_xoff,PLR2s_xoff
  3433.  move.l PLR2_zoff,PLR2s_zoff
  3434.  bra .cantmove
  3435. .nothitanything:
  3436.  
  3437.  move.w #40,extlen
  3438.  move.b #0,awayfromwall
  3439.  
  3440.  clr.b exitfirst
  3441.  clr.b wallbounce
  3442.  bsr MoveObject
  3443.  move.b StoodInTop,PLR2_StoodInTop
  3444.  move.l objroom,PLR2_Roompt
  3445.  move.w newx,PLR2_xoff
  3446.  move.w newz,PLR2_zoff
  3447.  move.l PLR2_xoff,PLR2s_xoff
  3448.  move.l PLR2_zoff,PLR2s_zoff
  3449.  
  3450. .cantmove
  3451.  
  3452.  move.l PLR2_Roompt,a0
  3453.  
  3454.  move.l ToZoneFloor(a0),d0
  3455.  tst.b PLR2_StoodInTop
  3456.  beq.s .notintop
  3457.  move.l ToUpperFloor(a0),d0
  3458. .notintop:
  3459.  
  3460.  adda.w #ToZonePts,a0
  3461.  sub.l PLR2_height,d0
  3462.  move.l d0,PLR2s_tyoff
  3463.  move.w p2_angpos,tmpangpos
  3464.  
  3465. ; move.l (a0),a0        ; jump to viewpoint list
  3466.  * A0 is pointing at a pointer to list of points to rotate
  3467.  move.w (a0)+,d1
  3468.  ext.l d1
  3469.  add.l PLR2_Roompt,d1
  3470.  move.l d1,PLR2_PointsToRotatePtr
  3471.  tst.w (a0)+
  3472.  beq.s .nobackgraphics
  3473.  cmp.b #'s',mors
  3474.  bne.s .nobackgraphics
  3475.  move.l a0,-(a7)
  3476.  jsr putinbackdrop 
  3477.  move.l (a7)+,a0
  3478. .nobackgraphics:
  3479.  adda.w #10,a0
  3480.  move.l a0,PLR2_ListOfGraphRooms
  3481.  
  3482. *****************************************************
  3483.  
  3484.  rts
  3485.  
  3486.  
  3487. KeyMap: ds.b 256
  3488.  
  3489. fillscrnwater:
  3490.  dc.w 0
  3491. DONTDOGUN:
  3492.  dc.w 0
  3493.  
  3494.  
  3495. DrawDisplay:
  3496.  
  3497.  
  3498.  clr.b fillscrnwater
  3499.  
  3500.  move.l #SineTable,a0
  3501.  move.w angpos,d0
  3502.  move.w (a0,d0.w),d6
  3503.  adda.w #2048,a0
  3504.  move.w (a0,d0.w),d7
  3505.  move.w d6,sinval
  3506.  move.w d7,cosval
  3507.  
  3508.  move.l #KeyMap,a5
  3509.  moveq #0,d5
  3510.  move.b look_behind_key,d5
  3511.  tst.b (a5,d5.w)
  3512.  sne DONTDOGUN
  3513.  beq.s .nolookback
  3514.  neg.w cosval
  3515.  neg.w sinval
  3516. .nolookback:
  3517.  
  3518.  
  3519.  move.l yoff,d0
  3520.  asr.l #8,d0
  3521.  move.w d0,d1
  3522.  add.w #256-32,d1
  3523.  and.w #255,d1
  3524.  move.w d1,wallyoff
  3525.  asl.w #2,d0
  3526.  move.w d0,flooryoff
  3527.  
  3528.  move.w xoff,d6
  3529.  move.w d6,d3
  3530.  asr.w #1,d3
  3531.  add.w d3,d6
  3532.  asr.w #1,d6
  3533.  move.w d6,xoff34
  3534.  
  3535.  move.w zoff,d6
  3536.  move.w d6,d3
  3537.  asr.w #1,d3
  3538.  add.w d3,d6
  3539.  asr.w #1,d6
  3540.  move.w d6,zoff34
  3541.  
  3542.  bsr RotateLevelPts
  3543.  bsr RotateObjectPts
  3544.  bsr CalcPLR1InLine
  3545.  
  3546.  
  3547.  cmp.b #'n',mors
  3548.  bne.s doplr2too
  3549.  move.l PLR2_Obj,a0
  3550.  move.w #-1,12(a0)
  3551.  move.w #-1,GraphicRoom(a0)
  3552.  bra noplr2either
  3553.  
  3554. doplr2too:
  3555.  bsr CalcPLR2InLine
  3556. noplr2either:
  3557.  
  3558.  move.l endoflist,a0
  3559. subroomloop:
  3560.  move.w -(a0),d7
  3561.  blt jumpoutofrooms
  3562.  
  3563. ; bsr setlrclip
  3564. ; move.w leftclip,d0
  3565. ; cmp.w rightclip,d0
  3566. ; bge subroomloop
  3567.  move.l a0,-(a7)
  3568.  
  3569.  move.l ZoneAdds,a0
  3570.  move.l (a0,d7.w*4),a0
  3571.  add.l LEVELDATA,a0
  3572.  move.l ToZoneRoof(a0),SplitHeight
  3573.  move.l a0,ROOMBACK
  3574.  
  3575.  move.l ZoneGraphAdds,a0
  3576.  move.l 4(a0,d7.w*8),a2
  3577.  move.l (a0,d7.w*8),a0
  3578.  
  3579.  add.l LEVELGRAPHICS,a0
  3580.  add.l LEVELGRAPHICS,a2
  3581.  move.l a2,ThisRoomToDraw+4
  3582.  move.l a0,ThisRoomToDraw
  3583.  
  3584.  move.l ListOfGraphRooms,a1
  3585.  
  3586.  
  3587.  
  3588. finditit:
  3589.  tst.w (a1)
  3590.  blt nomoretodoatall
  3591.  cmp.w (a1),d7
  3592.  beq outoffind
  3593.  adda.w #8,a1
  3594.  bra finditit
  3595.  
  3596. outoffind:
  3597.  
  3598.  move.l a1,-(a7)
  3599.  
  3600.  
  3601.  move.w #0,leftclip
  3602.  move.w #96,rightclip
  3603.  moveq #0,d7
  3604.  move.w 2(a1),d7
  3605.  blt.s outofrcliplop
  3606.  move.l LEVELCLIPS,a0
  3607.  lea (a0,d7.l*2),a0
  3608.  
  3609.  tst.w (a0)
  3610.  blt outoflcliplop
  3611.  
  3612.  bsr NEWsetlclip
  3613.  
  3614. intolcliplop:        ; clips
  3615.  tst.w (a0)
  3616.  blt outoflcliplop
  3617.  
  3618.  bsr NEWsetlclip 
  3619.  bra intolcliplop
  3620.  
  3621. outoflcliplop:
  3622.  
  3623.  addq #2,a0
  3624.  
  3625.  tst.w (a0)
  3626.  blt outofrcliplop
  3627.  
  3628.  bsr NEWsetrclip
  3629.  
  3630. intorcliplop:        ; clips
  3631.  tst.w (a0)
  3632.  blt outofrcliplop
  3633.  
  3634.  bsr NEWsetrclip 
  3635.  bra intorcliplop
  3636.  
  3637. outofrcliplop:
  3638.  
  3639.  
  3640.  move.w leftclip,d0
  3641.  cmp.w #96,d0
  3642.  bge dontbothercantseeit
  3643.  move.w rightclip,d1
  3644.  blt dontbothercantseeit
  3645.  cmp.w d1,d0
  3646.  bge dontbothercantseeit
  3647.  
  3648.  move.l yoff,d0
  3649.  cmp.l SplitHeight,d0
  3650.  blt botfirst
  3651.  
  3652.  move.l ThisRoomToDraw+4,a0
  3653.  cmp.l LEVELGRAPHICS,a0
  3654.  beq.s noupperroom
  3655.  st DOUPPER
  3656.  
  3657.  move.l ROOMBACK,a1
  3658.  move.l ToUpperRoof(a1),TOPOFROOM
  3659.  move.l ToUpperFloor(a1),BOTOFROOM
  3660.  
  3661.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3662.  bsr dothisroom
  3663. noupperroom:
  3664.  move.l ThisRoomToDraw,a0
  3665.  clr.b DOUPPER
  3666.  move.l #CurrentPointBrights,PointBrightsPtr
  3667.  
  3668.  move.l ROOMBACK,a1
  3669.  move.l ToZoneRoof(a1),d0
  3670.  move.l d0,TOPOFROOM
  3671.  move.l ToZoneFloor(a1),d1
  3672.  move.l d1,BOTOFROOM
  3673.  
  3674.  move.l ToZoneWater(a1),d2
  3675.  cmp.l yoff,d2
  3676.  blt.s .abovefirst
  3677.  move.l d2,BEFOREWATTOP
  3678.  move.l d1,BEFOREWATBOT
  3679.  move.l d2,AFTERWATBOT
  3680.  move.l d0,AFTERWATTOP
  3681.  bra.s .belowfirst
  3682. .abovefirst:
  3683.  move.l d0,BEFOREWATTOP
  3684.  move.l d2,BEFOREWATBOT
  3685.  move.l d1,AFTERWATBOT
  3686.  move.l d2,AFTERWATTOP
  3687. .belowfirst:
  3688.  
  3689.  bsr dothisroom
  3690.  
  3691.  bra dontbothercantseeit
  3692. botfirst:
  3693.  
  3694.  move.l ThisRoomToDraw,a0
  3695.  clr.b DOUPPER
  3696.  move.l #CurrentPointBrights,PointBrightsPtr
  3697.  
  3698.  move.l ROOMBACK,a1
  3699.  move.l ToZoneRoof(a1),d0
  3700.  move.l d0,TOPOFROOM
  3701.  move.l ToZoneFloor(a1),d1
  3702.  move.l d1,BOTOFROOM
  3703.  
  3704.  move.l ToZoneWater(a1),d2
  3705.  cmp.l yoff,d2
  3706.  blt.s .abovefirst
  3707.  move.l d2,BEFOREWATTOP
  3708.  move.l d1,BEFOREWATBOT
  3709.  move.l d2,AFTERWATBOT
  3710.  move.l d0,AFTERWATTOP
  3711.  bra.s .belowfirst
  3712. .abovefirst:
  3713.  move.l d0,BEFOREWATTOP
  3714.  move.l d2,BEFOREWATBOT
  3715.  move.l d1,AFTERWATBOT
  3716.  move.l d2,AFTERWATTOP
  3717. .belowfirst:
  3718.  
  3719.  
  3720.  bsr dothisroom
  3721.  move.l ThisRoomToDraw+4,a0
  3722.  cmp.l LEVELGRAPHICS,a0
  3723.  beq.s noupperroom2
  3724.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3725.  
  3726.  move.l ROOMBACK,a1
  3727.  move.l ToUpperRoof(a1),TOPOFROOM
  3728.  move.l ToUpperFloor(a1),BOTOFROOM
  3729.  
  3730.  st DOUPPER
  3731.  bsr dothisroom
  3732. noupperroom2:
  3733.  
  3734. dontbothercantseeit:
  3735. pastemp:
  3736.  
  3737.  move.l (a7)+,a1
  3738.  move.l ThisRoomToDraw,a0
  3739.  move.w (a0),d7
  3740.  
  3741.  adda.w #8,a1
  3742.  bra finditit
  3743.  
  3744. nomoretodoatall:
  3745.  
  3746.  move.l (a7)+,a0
  3747.  
  3748.  bra subroomloop
  3749.  
  3750. jumpoutofrooms:
  3751.  
  3752.  tst.b DONTDOGUN
  3753.  bne NOGUNLOOK
  3754.  
  3755.  cmp.b #'s',mors
  3756.  beq.s drawslavegun
  3757.  
  3758.  moveq #0,d0
  3759.  move.b PLR1_GunSelected,d0
  3760.  moveq #0,d1
  3761.  move.b PLR1_GunFrame,d1
  3762.  bsr DRAWINGUN
  3763.  bra drawngun
  3764.  
  3765. drawslavegun
  3766.  moveq #0,d0
  3767.  move.b PLR2_GunSelected,d0
  3768.  moveq #0,d1
  3769.  move.b PLR2_GunFrame,d1
  3770.  bsr DRAWINGUN
  3771.  
  3772. drawngun:
  3773.  
  3774. NOGUNLOOK:
  3775.  
  3776.  moveq #0,d1
  3777.  move.b PLR1_GunFrame,d1
  3778.  sub.w TempFrames,d1
  3779.  bgt.s .nn
  3780.  moveq #0,d1
  3781. .nn
  3782.  move.b d1,PLR1_GunFrame
  3783.  
  3784.  ble.s .donefire
  3785.  sub.b #1,PLR1_GunFrame
  3786. .donefire:
  3787.  
  3788.  moveq #0,d1
  3789.  move.b PLR2_GunFrame,d1
  3790.  sub.w TempFrames,d1
  3791.  bgt.s .nn2
  3792.  moveq #0,d1
  3793. .nn2
  3794.  move.b d2,PLR2_GunFrame
  3795.  
  3796.  ble.s .donefire2
  3797.  sub.b #1,PLR2_GunFrame
  3798. .donefire2:
  3799.  
  3800.  
  3801.  move.w #3,d5
  3802.  tst.b fillscrnwater
  3803.  beq nowaterfull
  3804.  bgt oknothalf
  3805.  moveq #1,d5
  3806. oknothalf:
  3807.  
  3808.  bclr.b #1,$bfe001
  3809.  
  3810.  move.l #brightentab,a2
  3811.  moveq #0,d2
  3812.  move.l frompt,a0
  3813.  add.l #104*4*60,a0
  3814.  
  3815.  move.w #31,d0
  3816. fw:
  3817.  move.w d5,d1
  3818.  move.l a0,a1
  3819. fwd:
  3820. val SET 104*4*19
  3821.  REPT 20
  3822.  and.w #$ff,val(a1)
  3823. val SET val-104*4
  3824.  ENDR
  3825.  sub.l #104*4*20,a1
  3826.  dbra d1,fwd
  3827.  addq #4,a0
  3828.  dbra d0,fw
  3829.  
  3830.  addq #4,a0
  3831.  
  3832.  move.w #31,d0
  3833. sw:
  3834.  move.w d5,d1
  3835.  move.l a0,a1
  3836. swd:
  3837. val SET 104*4*19
  3838.  REPT 20
  3839.  and.w #$ff,val(a1)
  3840. val SET val-104*4
  3841.  ENDR
  3842.  sub.l #104*4*20,a1
  3843.  dbra d1,swd
  3844.  addq #4,a0
  3845.  dbra d0,sw
  3846.  
  3847.  addq #4,a0
  3848.  
  3849.  move.w #31,d0
  3850. tw:
  3851.  move.w d5,d1
  3852.  move.l a0,a1
  3853. twd:
  3854. val SET 104*4*19
  3855.  REPT 20
  3856.  and.w #$ff,val(a1)
  3857. val SET val-104*4
  3858.  ENDR
  3859.  sub.l #104*4*20,a1
  3860.  dbra d1,twd
  3861.  addq #4,a0
  3862.  dbra d0,tw
  3863.  
  3864.  rts
  3865.  
  3866. nowaterfull:
  3867.  bset.b #1,$bfe001
  3868.  rts
  3869.  
  3870. prot9: dc.w 0
  3871.  
  3872. TempBuffer: ds.l 100 
  3873.  
  3874. ClipTable: ds.l 30
  3875. EndOfClipPt: dc.l 0
  3876. DOUPPER: dc.w 0
  3877.  
  3878. RealTable:
  3879.  dc.l prot1-78935450
  3880.  dc.l prot2-78935450
  3881.  dc.l prot3-78935450
  3882.  dc.l prot4-78935450
  3883.  dc.l prot5-78935450
  3884.  dc.l prot6-78935450
  3885.  dc.l prot7-78935450
  3886.  dc.l prot8-78935450
  3887.  dc.l prot9-78935450
  3888.  dc.l protA-78935450
  3889.  
  3890. dothisroom
  3891.  
  3892.  move.w (a0)+,d0
  3893.  move.w d0,currzone
  3894.  move.l #ZoneBrightTable,a1
  3895.  move.l (a1,d0.w*4),d1
  3896.  tst.b DOUPPER
  3897.  bne.s .okbot
  3898.  swap d1
  3899. .okbot:
  3900.  move.w d1,ZoneBright
  3901.  
  3902. polyloop:
  3903.  move.w (a0)+,d0
  3904.  blt jumpoutofloop
  3905.  beq itsawall
  3906.  cmp.w #3,d0
  3907.  beq itsasetclip
  3908.  blt itsafloor
  3909.  cmp.w #4,d0
  3910.  beq itsanobject
  3911.  cmp.w #5,d0
  3912.  beq.s itsanarc
  3913.  cmp.w #6,d0
  3914.  beq itsalightbeam
  3915.  cmp.w #7,d0
  3916.  beq.s itswater
  3917.  cmp.w #9,d0
  3918.  ble itsachunkyfloor
  3919.  cmp.w #11,d0
  3920.  ble.s itsabumpyfloor
  3921.  cmp.w #12,d0
  3922.  beq.s itsbackdrop
  3923.  cmp.w #13,d0
  3924.  beq.s itsaseewall
  3925.  
  3926.  bra polyloop
  3927.  
  3928. itsaseewall:
  3929.  st seethru
  3930.  jsr itsawalldraw
  3931.  bra polyloop
  3932.  
  3933. itsbackdrop:
  3934.  jsr putinbackdrop
  3935.  bra polyloop
  3936.  
  3937. itswater:
  3938. ; PROTHCHECK
  3939.  move.w #3,d0
  3940.  clr.b gourfloor
  3941.  move.l #FloorLine,LineToUse
  3942.  st usewater
  3943.  clr.b usebumps
  3944.  jsr itsafloordraw
  3945.  bra polyloop
  3946.  
  3947. itsanarc:
  3948.  jsr CurveDraw
  3949.  bra polyloop
  3950.  
  3951. itsanobject:
  3952.  jsr ObjDraw
  3953.  bra polyloop
  3954.  
  3955. itsalightbeam:
  3956.  jsr LightDraw
  3957.  bra polyloop
  3958.  
  3959. itsabumpyfloor:
  3960.  sub.w #9,d0
  3961.  st usebumps
  3962.  st smoothbumps
  3963.  clr.b usewater
  3964.  move.l #BumpLine,LineToUse
  3965.  jsr itsafloordraw
  3966.  bra polyloop
  3967.  
  3968. itsachunkyfloor:
  3969.  subq.w #7,d0
  3970.  st usebumps
  3971.  sub.w #12,topclip
  3972. ; add.w #10,botclip
  3973.  clr.b smoothbumps
  3974.  clr.b usewater
  3975.  move.l #BumpLine,LineToUse
  3976.  jsr itsafloordraw
  3977.  add.w #12,topclip
  3978. ; sub.w #10,botclip
  3979.  bra polyloop 
  3980.  
  3981. itsafloor:
  3982.  
  3983.  movem.l a0/d0,-(a7)
  3984.  move.l $4.w,a6
  3985.  jsr _LVOSuperState(a6)
  3986.  move.l d0,SSTACK
  3987.  movem.l (a7)+,a0/d0
  3988.  
  3989.  move.l THEFLOORLINE,LineToUse
  3990. * 1,2 = floor/roof
  3991.  clr.b usewater
  3992.  clr.b usebumps
  3993.  move.b GOURSEL,gourfloor    
  3994.  jsr itsafloordraw
  3995.  move.l a0,-(a7)
  3996.  move.l $4.w,a6
  3997.  move.l SSTACK,d0
  3998.  jsr _LVOUserState(a6)
  3999.  move.l (a7)+,a0
  4000.  bra polyloop
  4001. itsasetclip:
  4002.  bra polyloop
  4003. itsawall:
  4004.  clr.b seethru
  4005. ; move.l #stripbuffer,a1
  4006.  jsr itsawalldraw
  4007.  bra polyloop
  4008.  
  4009. jumpoutofloop:
  4010.  rts
  4011.  
  4012. GOURSEL: dc.w 0
  4013. ThisRoomToDraw: dc.l 0,0
  4014. SplitHeight: dc.l 0
  4015.  
  4016.  include "ab3:source/OrderZones"
  4017.  
  4018. ReadMouse:
  4019.  move.l #$dff000,a6
  4020.  clr.l d0
  4021.  clr.l d1
  4022.  move.w $a(a6),d0
  4023.  lsr.w #8,d0
  4024.  ext.l d0
  4025.  move.w d0,d3
  4026.  move.w oldmy,d2
  4027.  sub.w d2,d0
  4028.  
  4029.  cmp.w #127,d0
  4030.  blt nonegy
  4031.  move.w #255,d1
  4032.  sub.w d0,d1
  4033.  move.w d1,d0
  4034.  neg.w d0
  4035. nonegy:
  4036.  
  4037.  cmp.w #-127,d0
  4038.  bge nonegy2
  4039.  move.w #255,d1
  4040.  add.w d0,d1
  4041.  move.w d1,d0
  4042. nonegy2:
  4043.  
  4044.  add.b d0,d2
  4045.  add.w d0,oldy2
  4046.  move.w d2,oldmy
  4047.  move.w d2,d0
  4048.  
  4049.  move.w oldy2,d0
  4050.  move.w d0,ymouse
  4051.  
  4052.  clr.l d0
  4053.  clr.l d1
  4054.  move.w $a(a6),d0
  4055.  ext.w d0
  4056.  ext.l d0
  4057.  move.w d0,d3
  4058.  move.w oldmx,d2
  4059.  sub.w d2,d0
  4060.  
  4061.  cmp.w #127,d0
  4062.  blt nonegx
  4063.  move.w #255,d1
  4064.  sub.w d0,d1
  4065.  move.w d1,d0
  4066.  neg.w d0
  4067. nonegx:
  4068.  
  4069.  cmp.w #-127,d0
  4070.  bge nonegx2
  4071.  move.w #255,d1
  4072.  add.w d0,d1
  4073.  move.w d1,d0
  4074. nonegx2:
  4075.  
  4076.  add.b d0,d2
  4077.  move.w d0,d1
  4078.  move.w d2,oldmx
  4079.  
  4080.  move.w #$0,$dff034
  4081.  btst #2,$dff016
  4082.  beq.s noturn
  4083.  
  4084.  add.w d0,oldx2
  4085.  move.w oldx2,d0
  4086.  and.w #2047,d0
  4087.  move.w d0,oldx2
  4088.  
  4089.  asl.w #2,d0
  4090.  sub.w prevx,d0
  4091.  add.w d0,prevx
  4092.  add.w d0,angpos
  4093.  move.w #0,lrs
  4094.  rts
  4095.  
  4096. noturn:
  4097.  
  4098. ; got to move lr instead. 
  4099.  
  4100. ; d1 = speed moved l/r
  4101.  
  4102.  move.w d1,lrs
  4103.  
  4104.  rts
  4105.  
  4106. lrs: dc.w 0
  4107. prevx: dc.w 0
  4108.  
  4109. angpos: dc.w 0
  4110. mang: dc.w 0
  4111. oldymouse: dc.w 0
  4112. xmouse: dc.w 0
  4113. ymouse: dc.w 0
  4114. oldx2: dc.w 0
  4115. oldmx: dc.w 0
  4116. oldmy: dc.w 0
  4117. oldy2: dc.w 0
  4118.  
  4119. RotateLevelPts:
  4120.  
  4121.  move.w sinval,d6
  4122.  swap d6
  4123.  move.w cosval,d6
  4124.  
  4125.  move.l PointsToRotatePtr,a0
  4126.  move.l Points,a3
  4127.  move.l #Rotated,a1
  4128.  move.l #OnScreen,a2
  4129.  move.w xoff,d4
  4130.  move.w zoff,d5
  4131.  
  4132. ; move.w #$c40,$dff106
  4133. ; move.w #$f00,$dff180
  4134.  
  4135. pointrotlop:
  4136.  move.w (a0)+,d7
  4137.  blt.s outofpointrot
  4138.  
  4139.  move.w (a3,d7*4),d0
  4140.  sub.w d4,d0
  4141.  move.w d0,d2
  4142.  move.w 2(a3,d7*4),d1
  4143.  sub.w d5,d1
  4144.  muls d6,d2
  4145.  swap d6
  4146.  move.w d1,d3
  4147.  muls d6,d3
  4148.  sub.l d3,d2
  4149.  add.l d2,d2
  4150.  swap d2
  4151.  ext.l d2
  4152.  asl.l #7,d2
  4153.  add.l xwobble,d2
  4154.  move.l d2,(a1,d7*8)
  4155.  
  4156.  muls d6,d0
  4157.  swap d6
  4158.  muls d6,d1
  4159.  add.l d0,d1
  4160.  asl.l #2,d1
  4161.  swap d1
  4162.  move.l d1,4(a1,d7*8)
  4163.  
  4164.  tst.w d1
  4165.  bgt.s ptnotbehind
  4166.  tst.w d2
  4167.  bgt.s onrightsomewhere
  4168.  move.w #0,d2
  4169.  bra putin
  4170. onrightsomewhere:
  4171.  move.w #96,d2
  4172.  bra putin
  4173. ptnotbehind:
  4174.  
  4175.  divs d1,d2
  4176.  add.w #47,d2
  4177. putin:
  4178.  move.w d2,(a2,d7*2)
  4179.  
  4180.  bra pointrotlop
  4181. outofpointrot:
  4182.  
  4183. ; move.w #$c40,$dff106
  4184. ; move.w #$ff0,$dff180
  4185.  
  4186.  rts
  4187.  
  4188. PLR1_ObjDists
  4189.  ds.w 250
  4190. PLR2_ObjDists
  4191.  ds.w 250
  4192.  
  4193. CalcPLR1InLine:
  4194.  
  4195.  move.w PLR1_sinval,d5
  4196.  move.w PLR1_cosval,d6
  4197.  move.l ObjectData,a4
  4198.  move.l ObjectPoints,a0
  4199.  move.w NumObjectPoints,d7
  4200.  move.l #PLR1_ObsInLine,a2
  4201.  move.l #PLR1_ObjDists,a3
  4202.  
  4203. .objpointrotlop:
  4204.  
  4205.  move.w (a0),d0
  4206.  sub.w PLR1_xoff,d0
  4207.  move.w 4(a0),d1
  4208.  addq #8,a0
  4209.  
  4210.  tst.w 12(a4)
  4211.  blt .noworkout
  4212.  
  4213.  moveq #0,d2
  4214.  move.b 16(a4),d2
  4215.  move.l #ColBoxTable,a6
  4216.  lea (a6,d2.w*8),a6
  4217.  
  4218.  sub.w PLR1_zoff,d1
  4219.  move.w d0,d2
  4220.  muls d6,d2
  4221.  move.w d1,d3
  4222.  muls d5,d3
  4223.  sub.l d3,d2
  4224.  add.l d2,d2
  4225.  
  4226.  bgt.s .okh
  4227.  neg.l d2
  4228. .okh:
  4229.  swap d2
  4230.  
  4231.  muls d5,d0
  4232.  muls d6,d1
  4233.  add.l d0,d1
  4234.  asl.l #2,d1
  4235.  swap d1
  4236.  moveq #0,d3
  4237.  
  4238.  tst.w d1
  4239.  ble.s .notinline
  4240.  asr.w #1,d2
  4241.  cmp.w (a6),d2
  4242.  bgt.s .notinline
  4243.  
  4244.  st d3
  4245. .notinline
  4246.  move.b d3,(a2)+
  4247.  
  4248.  move.w d1,(a3)+
  4249.  
  4250.  add.w #64,a4
  4251.  dbra d7,.objpointrotlop
  4252.  
  4253.  rts
  4254.  
  4255. .noworkout:
  4256.  move.b #0,(a2)+
  4257.  move.w #0,(a3)+
  4258.  add.w #64,a4
  4259.  dbra d7,.objpointrotlop
  4260.  rts
  4261.  
  4262.  
  4263. CalcPLR2InLine:
  4264.  
  4265.  move.w PLR2_sinval,d5
  4266.  move.w PLR2_cosval,d6
  4267.  move.l ObjectData,a4
  4268.  move.l ObjectPoints,a0
  4269.  move.w NumObjectPoints,d7
  4270.  move.l #PLR2_ObsInLine,a2
  4271.  move.l #PLR2_ObjDists,a3
  4272.  
  4273. .objpointrotlop:
  4274.  
  4275.  move.w (a0),d0
  4276.  sub.w PLR2_xoff,d0
  4277.  move.w 4(a0),d1
  4278.  addq #8,a0
  4279.  
  4280.  tst.w 12(a4)
  4281.  blt .noworkout
  4282.  
  4283.  moveq #0,d2
  4284.  move.b 16(a4),d2
  4285.  move.l #ColBoxTable,a6
  4286.  lea (a6,d2.w*8),a6
  4287.  
  4288.  sub.w PLR2_zoff,d1
  4289.  move.w d0,d2
  4290.  muls d6,d2
  4291.  move.w d1,d3
  4292.  muls d5,d3
  4293.  sub.l d3,d2
  4294.  add.l d2,d2
  4295.  
  4296.  bgt.s .okh
  4297.  neg.l d2
  4298. .okh:
  4299.  swap d2
  4300.  
  4301.  muls d5,d0
  4302.  muls d6,d1
  4303.  add.l d0,d1
  4304.  asl.l #2,d1
  4305.  swap d1
  4306.  moveq #0,d3
  4307.  
  4308.  tst.w d1
  4309.  ble.s .notinline
  4310.  asr.w #1,d2
  4311.  cmp.w (a6),d2
  4312.  bgt.s .notinline
  4313.  
  4314.  st d3
  4315. .notinline
  4316.  move.b d3,(a2)+
  4317.  
  4318.  move.w d1,(a3)+
  4319.  
  4320.  add.w #64,a4
  4321.  dbra d7,.objpointrotlop
  4322.  
  4323.  rts
  4324.  
  4325. .noworkout:
  4326.  move.w #0,(a3)+
  4327.  move.b #0,(a2)+
  4328.  add.w #64,a4
  4329.  dbra d7,.objpointrotlop
  4330.  rts
  4331.  
  4332.  
  4333. RotateObjectPts:
  4334.  
  4335.  move.w sinval,d5
  4336.  move.w cosval,d6
  4337.  
  4338.  move.l ObjectData,a4
  4339.  move.l ObjectPoints,a0
  4340.  move.w NumObjectPoints,d7
  4341.  move.l #ObjRotated,a1
  4342.  
  4343. .objpointrotlop:
  4344.  
  4345.  move.w (a0),d0
  4346.  sub.w xoff,d0
  4347.  move.w 4(a0),d1
  4348.  addq #8,a0
  4349.  
  4350.  tst.w 12(a4)
  4351.  blt .noworkout
  4352.  
  4353.  sub.w zoff,d1
  4354.  move.w d0,d2
  4355.  muls d6,d2
  4356.  move.w d1,d3
  4357.  muls d5,d3
  4358.  sub.l d3,d2
  4359.  
  4360.  
  4361.  add.l d2,d2
  4362.  swap d2
  4363.  move.w d2,(a1)+
  4364.  
  4365.  muls d5,d0
  4366.  muls d6,d1
  4367.  add.l d0,d1
  4368.  asl.l #2,d1
  4369.  swap d1
  4370.  moveq #0,d3
  4371.  
  4372.  move.w d1,(a1)+
  4373.  ext.l d2
  4374.  asl.l #7,d2
  4375.  add.l xwobble,d2
  4376.  move.l d2,(a1)+
  4377.  sub.l xwobble,d2
  4378.  
  4379.  add.w #64,a4
  4380.  dbra d7,.objpointrotlop
  4381.  
  4382.  rts
  4383.  
  4384. .noworkout:
  4385.   move.l #0,(a1)+
  4386.   move.l #0,(a1)+
  4387.   add.w #64,a4
  4388.   dbra d7,.objpointrotlop
  4389.   rts
  4390.  
  4391. LightDraw:
  4392.  
  4393.  move.w (a0)+,d0
  4394.  move.w (a0)+,d1
  4395.  move.l #Rotated,a1
  4396.  move.w 6(a1,d0.w*8),d2
  4397.  ble.s oneendbehind
  4398.  move.w 6(a1,d1.w*8),d3
  4399.  bgt.s bothendsinfront
  4400.  
  4401. oneendbehind:
  4402.  rts
  4403. bothendsinfront:
  4404.  
  4405.  move.l #OnScreen,a2
  4406.  move.w (a2,d0.w*2),d0
  4407.  bge.s okleftend
  4408.  moveq #0,d0
  4409. okleftend:
  4410.  move.w (a2,d1.w*2),d1
  4411.  bgt.s somevis
  4412.  rts
  4413. somevis:
  4414.  cmp.w #95,d0
  4415.  ble.s somevis2
  4416.  rts
  4417. somevis2:
  4418.  cmp.w #95,d1
  4419.  ble.s okrightend
  4420.  move.w #95,d1
  4421. okrightend:
  4422.  
  4423.  sub.w d0,d1
  4424.  blt.s wrongbloodywayround
  4425.  move.l #brightentab,a4
  4426.  move.l #objintocop,a1
  4427.  lea (a1,d0.w*2),a1
  4428.  
  4429.  move.l frompt,a3
  4430.  move.w #104*4,d6
  4431.  move.w #79,d2
  4432. lacross:
  4433.  move.w d2,d3
  4434.  move.l a3,a2
  4435.  adda.w (a1)+,a2
  4436. ldown:
  4437.  add.w d6,a2
  4438.  move.w (a2),d7
  4439.  move.w (a4,d7.w*2),(a2)
  4440.  dbra d3,ldown
  4441.  dbra d1,lacross
  4442.  
  4443. wrongbloodywayround:
  4444.  
  4445.  rts
  4446.  
  4447. FaceToPlace: dc.w 0
  4448.  
  4449. Cheese:
  4450.  dc.w 4,15
  4451.  
  4452. FacesList:
  4453.  dc.w 0,4*4
  4454.  dc.w 1,2*4
  4455.  dc.w 0,2*4
  4456.  dc.w 2,2*4
  4457.  dc.w 0,2*4
  4458.  dc.w 1,3*4
  4459.  dc.w 0,2*4
  4460.  dc.w 2,3*4
  4461.  dc.w 0,5*4
  4462.  dc.w 1,2*4
  4463.  dc.w 0,2*4
  4464.  dc.w 2,2*4
  4465.  dc.w 0,2*4
  4466.  dc.w 1,2*4
  4467.  dc.w 0,2*4
  4468.  dc.w 2,3*4
  4469.  dc.w 0,1*4
  4470.  dc.w 1,3*4
  4471.  dc.w 0,1*4
  4472.  dc.w 2,3*4
  4473.  dc.w 0,1*4
  4474.  
  4475. EndOfFacesList:
  4476.  
  4477. FacesPtr:
  4478.  dc.l FacesList
  4479. FacesCounter:
  4480.  dc.w 0
  4481. Expression:
  4482.  dc.w 0
  4483.  
  4484. PlaceFace:
  4485.  
  4486.  move.w FacesCounter,d0
  4487.  subq #1,d0
  4488.  bgt.s NoNewFace
  4489.  
  4490.  move.l FacesPtr,a0
  4491.  
  4492.  move.w 2(a0),d0
  4493.  move.w (a0),Expression
  4494.  addq #4,a0
  4495.  cmp.l #EndOfFacesList,a0
  4496.  blt.s NotFirstFace
  4497.  
  4498.  move.l #FacesList,a0
  4499.  
  4500. NotFirstFace
  4501.  move.l a0,FacesPtr
  4502.  
  4503. NoNewFace:
  4504.  
  4505.  move.w d0,FacesCounter
  4506.  
  4507.  Move.w FaceToPlace,d0
  4508.  muls #5,d0
  4509.  add.w Expression,d0
  4510.  move.l #FacePlace+10,a0
  4511.  move.l #Faces,a1
  4512.  muls #(4*32*5),d0
  4513.  adda.w d0,a1
  4514.  move.w #4,d0
  4515.  move.w #24,d1
  4516.  
  4517.  move.w #4,d3
  4518. bitplaneloop:
  4519.  move.w #31,d2
  4520. PlaceFaceToPlaceInFacePlaceLoop:
  4521.  move.l (a1),(a0)
  4522.  adda.w d0,a1
  4523.  adda.w d1,a0
  4524.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  4525.  dbra d3,bitplaneloop
  4526.  
  4527.  rts
  4528.  
  4529. Energy:
  4530.  dc.w 191
  4531. OldEnergy:
  4532.  dc.w 191
  4533. Ammo: dc.w 63
  4534. OldAmmo: dc.w 63
  4535.  
  4536. FullEnergy:
  4537.  move.w #127,Energy
  4538.  move.w #127,OldEnergy
  4539.  move.l #health,a0
  4540.  move.l #borders,a1
  4541.  add.l #25*8*2+6,a1
  4542.  lea 2592(a1),a2
  4543.  move.w #127,d0
  4544. PutInFull:
  4545.  move.b (a0)+,(a1)
  4546.  move.b (a0)+,8(a1)
  4547.  add.w #16,a1
  4548.  move.b (a0)+,(a2)
  4549.  move.b (a0)+,8(a2)
  4550.  add.w #16,a2
  4551.  dbra d0,PutInFull
  4552.  
  4553.  rts
  4554.  
  4555. EnergyBar:
  4556.  
  4557.  move.w Energy,d0
  4558.  bgt.s .noeneg
  4559.  move.w #0,d0
  4560. .noeneg:
  4561.  move.w d0,Energy
  4562.  
  4563.  cmp.w OldEnergy,d0
  4564.  bne.s gottochange
  4565.  
  4566. NoChange
  4567.  rts
  4568.  
  4569. gottochange:
  4570.   
  4571.  blt LessEnergy
  4572.  cmp.w #127,Energy
  4573.  blt.s NotMax
  4574.  move.w #127,Energy
  4575. NotMax:
  4576.  
  4577.  move.w Energy,d0
  4578.  move.w OldEnergy,d2
  4579.  sub.w d0,d2
  4580.  beq.s NoChange    
  4581.  neg.w d2
  4582.  
  4583.  move.w #127,d3
  4584.  sub.w d0,d3
  4585.  
  4586.  move.l #health,a0
  4587.  lea (a0,d3.w*4),a0
  4588.  move.l #borders+25*16+6,a1
  4589.  lsl.w #4,d3
  4590.  add.w d3,a1
  4591.  lea 2592(a1),a2
  4592.  
  4593. EnergyRise:
  4594.  move.b (a0)+,(a1)
  4595.  move.b (a0)+,8(a1)
  4596.  add.w #16,a1
  4597.  move.b (a0)+,(a2)
  4598.  move.b (a0)+,8(a2)
  4599.  add.w #16,a2
  4600.  subq #1,d2
  4601.  bgt.s EnergyRise
  4602.  
  4603.  move.w Energy,OldEnergy
  4604.  
  4605.  rts 
  4606.  
  4607. LessEnergy: 
  4608.  move.w OldEnergy,d2
  4609.  sub.w d0,d2
  4610.  
  4611.  move.w #127,d3
  4612.  sub.w OldEnergy,d3
  4613.  
  4614.  move.l #borders+25*16+6,a1
  4615.  asl.w #4,d3
  4616.  add.w d3,a1
  4617.  lea 2592(a1),a2
  4618.  
  4619. EnergyDrain:
  4620.  move.b #0,(a1)
  4621.  move.b #0,8(a1)
  4622.  move.b #0,(a2)
  4623.  move.b #0,8(a2)
  4624.  add.w #16,a1
  4625.  add.w #16,a2
  4626.  subq #1,d2
  4627.  bgt.s EnergyDrain
  4628.  
  4629.  move.w Energy,OldEnergy
  4630.  
  4631.  rts 
  4632.  
  4633. AmmoBar:
  4634.  
  4635.  move.w Ammo,d0
  4636.  cmp.w OldAmmo,d0
  4637.  bne.s .gottochange
  4638.  
  4639. .NoChange
  4640.  rts
  4641.  
  4642. .gottochange:
  4643.   
  4644.  blt LessAmmo
  4645.  cmp.w #63,Ammo
  4646.  blt.s .NotMax
  4647.  move.w #63,Ammo
  4648. .NotMax:
  4649.  
  4650.  move.w Ammo,d0
  4651.  move.w OldAmmo,d2
  4652.  sub.w d0,d2
  4653.  beq.s .NoChange
  4654.  neg.w d2
  4655.  
  4656.  move.w #63,d3
  4657.  sub.w d0,d3
  4658.  
  4659.  move.l #Ammunition,a0
  4660.  lea (a0,d3.w*8),a0
  4661.  move.l #borders+5184+25*16+1,a1
  4662.  lsl.w #5,d3
  4663.  add.w d3,a1
  4664.  lea 2592(a1),a2
  4665.  
  4666. AmmoRise:
  4667.  move.b (a0)+,(a1)
  4668.  move.b (a0)+,8(a1)
  4669.  add.w #16,a1
  4670.  move.b (a0)+,(a2)
  4671.  move.b (a0)+,8(a2)
  4672.  add.w #16,a2
  4673.  move.b (a0)+,(a1)
  4674.  move.b (a0)+,8(a1)
  4675.  add.w #16,a1
  4676.  move.b (a0)+,(a2)
  4677.  move.b (a0)+,8(a2)
  4678.  add.w #16,a2
  4679.  subq #1,d2
  4680.  bgt.s AmmoRise
  4681.  
  4682.  move.w Ammo,OldAmmo
  4683.  
  4684.  rts 
  4685.  
  4686.  
  4687. LessAmmo: 
  4688.  move.w OldAmmo,d2
  4689.  sub.w d0,d2
  4690.  
  4691.  move.w #63,d3
  4692.  sub.w OldAmmo,d3
  4693.  
  4694.  move.l #borders++5184+25*16+1,a1
  4695.  asl.w #5,d3
  4696.  add.w d3,a1
  4697.  lea 2592(a1),a2
  4698.  
  4699. AmmoDrain:
  4700.  move.b #0,(a1)
  4701.  move.b #0,8(a1)
  4702.  move.b #0,(a2)
  4703.  move.b #0,8(a2)
  4704.  add.w #16,a1
  4705.  add.w #16,a2
  4706.  move.b #0,(a1)
  4707.  move.b #0,8(a1)
  4708.  move.b #0,(a2)
  4709.  move.b #0,8(a2)
  4710.  add.w #16,a1
  4711.  add.w #16,a2
  4712.  subq #1,d2
  4713.  bgt.s AmmoDrain
  4714.  
  4715.  move.w Ammo,OldAmmo
  4716.  
  4717.  rts 
  4718.  
  4719. nulop:
  4720.  move.w #$0010,$dff000+intreq
  4721.  rte
  4722.  
  4723. doanything: dc.w 0
  4724.  
  4725. end:
  4726.  
  4727.  clr.b doanything
  4728.  
  4729.  move.w PLR1_energy,Energy
  4730.  cmp.b #'s',mors
  4731.  bne.s .notsl
  4732.  move.w PLR2_energy,Energy
  4733. .notsl:
  4734.  
  4735.  bsr EnergyBar
  4736.  
  4737.  move.l drawpt,d0
  4738.  move.l olddrawpt,drawpt
  4739.  move.l d0,olddrawpt
  4740.  move.l d0,$dff084
  4741.  
  4742.  
  4743.  cmp.b #'b',Prefsfile+3
  4744.  bne.s .noback
  4745.  jsr mt_end
  4746. .noback
  4747.  tst.w Energy
  4748.  bgt.s wevewon
  4749.  
  4750.  move.l #gameover,mt_data
  4751.  st UseAllChannels
  4752.  clr.b reachedend
  4753.  jsr mt_init
  4754. playgameover:
  4755.  move.l #$dff000,a6
  4756. waitfortop2:
  4757.  btst.b #0,intreqrl(a6)
  4758.  beq waitfortop2
  4759.  move.w #$1,intreq(a6)
  4760.  
  4761.  jsr mt_music
  4762.  
  4763.  tst.b reachedend
  4764.  beq.s playgameover
  4765.  
  4766.  bra wevelost
  4767.  
  4768.  
  4769. wevewon:
  4770.  
  4771.  cmp.b #'n',mors
  4772.  bne.s .nonextlev
  4773.  add.w #1,MAXLEVEL
  4774.  st FINISHEDLEVEL
  4775. .nonextlev:
  4776.  
  4777.  move.l #welldone,mt_data
  4778.  st UseAllChannels
  4779.  clr.b reachedend
  4780.  jsr mt_init
  4781. playwelldone:
  4782.  move.l #$dff000,a6
  4783. waitfortop3:
  4784.  btst.b #0,intreqrl(a6)
  4785.  beq waitfortop3
  4786.  move.w #$1,intreq(a6)
  4787.  
  4788.  jsr mt_music
  4789.  
  4790.  tst.b reachedend
  4791.  beq.s playwelldone
  4792.  
  4793.  cmp.w #16,MAXLEVEL
  4794.  bne .noendgame
  4795.  jsr ENDGAMESCROLL
  4796. .noendgame:
  4797.  
  4798. wevelost:
  4799.  jmp closeeverything 
  4800.  
  4801. endnomusic
  4802.  clr.b doanything
  4803.  cmp.b #'b',Prefsfile+3
  4804.  bne.s .noback
  4805.  jsr mt_end
  4806. .noback
  4807. *******************************
  4808. ; cmp.b #'n',mors
  4809. ; bne.s .nonextlev
  4810. ; cmp.w #15,MAXLEVEL
  4811. ; bge.s .nonextlev
  4812. ; add.w #1,MAXLEVEL
  4813. ; st FINISHEDLEVEL
  4814. ;.nonextlev:
  4815. ******************************
  4816.  
  4817.  jmp closeeverything
  4818.  
  4819. do32:
  4820.  move.w #31,d7
  4821.  move.w #$180,d1
  4822. across:
  4823.  move.w d1,(a1)+
  4824.  move.w d1,(a3)+
  4825.  move.w #0,(a1)+ 
  4826.  move.w #0,(a3)+
  4827.  add.w #2,d1
  4828.  dbra d7,across
  4829.  rts
  4830.  
  4831. ENDGAMESCROLL:
  4832.  include "endscroll.s"
  4833.  
  4834. ***********************************
  4835.  include "ab3:source/CD32JOY"
  4836.  
  4837.  
  4838.  
  4839. *************************************
  4840. * Set left and right clip values
  4841. *************************************
  4842.  
  4843.  
  4844.  
  4845. NEWsetlclip:
  4846.  move.l #OnScreen,a1
  4847.  move.l #Rotated,a2
  4848.  move.l CONNECT_TABLE,a3
  4849.  
  4850.  move.w (a0),d0
  4851.  bge.s .notignoreleft
  4852.  
  4853. ; move.l #0,(a6)
  4854.  
  4855.  bra .leftnotoktoclip
  4856. .notignoreleft:
  4857.  
  4858.  move.w 6(a2,d0*8),d3    ; left z val
  4859.  bgt.s .leftclipinfront
  4860.  addq #2,a0
  4861.  rts
  4862.  
  4863.  tst.w 6(a2,d0*8)
  4864.  bgt.s .leftnotoktoclip
  4865. .ignoreboth:
  4866. ; move.l #0,(a6)
  4867. ; move.l #96*65536,4(a6)
  4868.  move.w #0,leftclip
  4869.  move.w #96,rightclip
  4870.  addq #8,a6
  4871.  addq #2,a0
  4872.  rts
  4873.  
  4874. .leftclipinfront:
  4875.  move.w (a1,d0*2),d1    ; left x on screen
  4876.  move.w (a0),d2
  4877.  move.w 2(a3,d2.w*4),d2
  4878.  move.w (a1,d2.w*2),d2
  4879.  cmp.w d1,d2
  4880.  bgt.s .leftnotoktoclip
  4881.  
  4882. ; move.w d1,(a6)
  4883. ; move.w d3,2(a6)
  4884.  cmp.w leftclip,d1
  4885.  ble.s .leftnotoktoclip
  4886.  move.w d1,leftclip
  4887. .leftnotoktoclip:
  4888.  
  4889.  addq #2,a0
  4890.  
  4891.  rts
  4892.  
  4893. NEWsetrclip
  4894.  move.l #OnScreen,a1
  4895.  move.l #Rotated,a2
  4896.  move.l CONNECT_TABLE,a3
  4897.  move.w (a0),d0
  4898.  bge.s .notignoreright
  4899. ; move.w #96,4(a6)
  4900. ; move.w #0,6(a6)
  4901.  move.w #0,d4
  4902.  bra .rightnotoktoclip
  4903. .notignoreright:
  4904.  move.w 6(a2,d0*8),d4    ; right z val
  4905.  bgt.s .rightclipinfront
  4906. ; move.w #96,4(a6)
  4907. ; move.w #0,6(a6)
  4908.  bra.s .rightnotoktoclip
  4909.  
  4910. .rightclipinfront:
  4911.  move.w (a1,d0*2),d1    ; right x on screen
  4912.  move.w (a0),d2
  4913.  move.w (a3,d2.w*4),d2
  4914.  move.w (a1,d2.w*2),d2
  4915.  cmp.w d1,d2
  4916.  blt.s .rightnotoktoclip
  4917. ; move.w d1,4(a6)
  4918. ; move.w d4,6(a6)
  4919.  
  4920.  cmp.w rightclip,d1
  4921.  bge.s .rightnotoktoclip
  4922.  addq #1,d1
  4923.  move.w d1,rightclip
  4924. .rightnotoktoclip:
  4925.  addq #8,a6
  4926.  addq #2,a0
  4927.  rts
  4928.  
  4929. FIRSTsetlrclip:
  4930.  move.l #OnScreen,a1
  4931.  move.l #Rotated,a2
  4932.  
  4933.  move.w (a0)+,d0
  4934.  bge.s .notignoreleft
  4935.  bra .leftnotoktoclip
  4936. .notignoreleft:
  4937.  
  4938.  move.w 6(a2,d0*8),d3    ; left z val
  4939.  bgt.s .leftclipinfront
  4940.  
  4941.  move.w (a0),d0
  4942.  blt.s .ignoreboth
  4943.  tst.w 6(a2,d0*8)
  4944.  bgt.s .leftnotoktoclip
  4945. .ignoreboth
  4946.  move.w #96,rightclip
  4947.  move.w #0,leftclip
  4948.  addq #2,a0
  4949.  rts
  4950.  
  4951. .leftclipinfront:
  4952.  move.w (a1,d0*2),d1    ; left x on screen
  4953.  cmp.w leftclip,d1
  4954.  ble.s .leftnotoktoclip
  4955.  move.w d1,leftclip
  4956. .leftnotoktoclip:
  4957.  
  4958.  move.w (a0)+,d0
  4959.  bge.s .notignoreright
  4960.  move.w #0,d4
  4961.  bra .rightnotoktoclip
  4962. .notignoreright:
  4963.  move.w 6(a2,d0*8),d4    ; right z val
  4964.  ble.s .rightnotoktoclip
  4965.  
  4966. .rightclipinfront:
  4967.  move.w (a1,d0*2),d1    ; right x on screen
  4968.  addq #1,d1
  4969.  cmp.w rightclip,d1
  4970.  bge.s .rightnotoktoclip
  4971.  move.w d1,rightclip
  4972. .rightnotoktoclip:
  4973.  
  4974. ; move.w leftclip,d0
  4975. ; move.w rightclip,d1
  4976. ; cmp.w d0,d1
  4977. ; bge.s .noswap
  4978. ; move.w #96,rightclip
  4979. ; move.w #0,leftclip
  4980. ;.noswap:
  4981.  
  4982.  rts
  4983.  
  4984.  
  4985. leftclip2: dc.w 0
  4986. rightclip2: dc.w 0
  4987. ZoneBright: dc.w 0
  4988.  
  4989. npolys: dc.w 0
  4990.  
  4991. PLR1_fire: dc.b 0
  4992. PLR2_fire: dc.b 0
  4993.  
  4994. *****************************************************
  4995.  
  4996.  
  4997. pastdata:
  4998. ***********************************
  4999. * This routine animates brightnesses.
  5000.  
  5001.  
  5002. liftpt: dc.l liftanimtab
  5003.  
  5004. brightpt:
  5005.  dc.l brightanimtab
  5006.  
  5007.  
  5008. liftanim:
  5009.  rts
  5010.  
  5011. ******************************
  5012.  include "ab3:source/ObjectMove"
  5013.  include "ab3:source/Anims"
  5014. ******************************
  5015. startpass:
  5016. ; include "ab3:source/password_reloc.s"
  5017. endpass:
  5018.  
  5019. rotanimpt: dc.w 0
  5020. xradd: dc.w 5
  5021. yradd: dc.w 8
  5022. xrpos: dc.w 320
  5023. yrpos: dc.w 320
  5024.  
  5025. rotanim:
  5026.  rts
  5027.  
  5028. option:
  5029.  dc.l 0,0
  5030.  
  5031. ********** WALL STUFF *******************************
  5032.  
  5033.  include "AB3:source/wallroutine3.chipmem"
  5034.  
  5035. *****************************************************
  5036.  
  5037. ******************************************
  5038. * floor polygon
  5039.  
  5040. numsidestd: dc.w 0
  5041. bottomline: dc.w 0
  5042.  
  5043. checkforwater:
  5044.  tst.b usewater
  5045.  beq.s .notwater
  5046.  
  5047.  move.l Roompt,a1
  5048.  move.w (a1),d7
  5049.  cmp.w currzone,d7
  5050.  bne.s .notwater
  5051.  
  5052.  move.b #$f,fillscrnwater
  5053.  
  5054. .notwater:
  5055.  move.w (a0)+,d6    ; sides-1
  5056.  add.w d6,d6
  5057.  add.w d6,a0
  5058.  add.w #4+6,a0
  5059.  rts
  5060.  
  5061.  rts
  5062.  
  5063. NewCornerBuff:
  5064.  ds.l 100
  5065. CLRNOFLOOR: dc.w 0
  5066.  
  5067. itsafloordraw:
  5068.  
  5069. * If D0 =1 then its a floor otherwise (=2) it's
  5070. * a roof.
  5071.  
  5072.  move.w #0,above
  5073.  move.w (a0)+,d6    ; ypos of poly
  5074.  
  5075.  move.w d6,d7
  5076.  ext.l d7
  5077.  asl.l #6,d7
  5078.  cmp.l TOPOFROOM,d7
  5079.  blt checkforwater
  5080.  cmp.l BOTOFROOM,d7
  5081.  bgt.s dontdrawreturn
  5082.  
  5083.  move.w leftclip(pc),d7
  5084.  cmp.w rightclip(pc),d7
  5085.  bge.s dontdrawreturn
  5086.  
  5087.  move.w botclip,d7
  5088.  sub.w #40,d7
  5089.  ble.s dontdrawreturn
  5090.  sub.w flooryoff,d6
  5091.  bgt.s below
  5092.  blt.s aboveplayer
  5093.  
  5094.  tst.b usewater
  5095.  beq.s .notwater
  5096.  
  5097.  move.l Roompt,a1
  5098.  move.w (a1),d7
  5099.  cmp.w currzone,d7
  5100.  
  5101.  bne.s .notwater
  5102.  
  5103.  st fillscrnwater
  5104.  
  5105. .notwater:
  5106.  
  5107.  
  5108. dontdrawreturn:
  5109.  move.w (a0)+,d6    ; sides-1
  5110.  add.w d6,d6
  5111.  add.w d6,a0
  5112.  add.w #4+6,a0
  5113.  rts
  5114. aboveplayer:
  5115.  
  5116.  tst.b usewater
  5117.  beq.s .notwater
  5118.  
  5119.  move.l Roompt,a1
  5120.  move.w (a1),d7
  5121.  cmp.w currzone,d7
  5122.  bne.s .notwater
  5123.  
  5124.  move.b #$f,fillscrnwater
  5125.  
  5126. .notwater:
  5127.  
  5128.  btst #1,d0
  5129.  beq.s dontdrawreturn
  5130.  move.w #40,d7
  5131.  sub.w topclip,d7 
  5132.  ble.s dontdrawreturn
  5133.  move.w #1,d0
  5134.  move.w d0,above
  5135.  neg.w d6
  5136. below:
  5137.  btst #0,d0
  5138.  beq.s dontdrawreturn
  5139.  move.w d6,distaddr
  5140.  muls #64,d6
  5141.  move.l d6,ypos
  5142.  divs d7,d6        ; zpos of bottom
  5143.             ; visible line
  5144.  move.w d6,minz
  5145.  move.w d7,bottomline
  5146.  
  5147. ; Go round each point finding out
  5148. ; if it should be visible or not.
  5149.  
  5150.  move.l a0,-(a7)
  5151.  
  5152.  move.w (a0)+,d7    ; number of sides
  5153.  move.l #Rotated,a1
  5154.  move.l #OnScreen,a2
  5155.  move.l #NewCornerBuff,a3
  5156.  moveq #0,d4
  5157.  moveq #0,d5
  5158.  moveq #0,d6
  5159.  clr.b anyclipping
  5160.  
  5161. cornerprocessloop:
  5162.  
  5163.  move.w (a0)+,d0
  5164.  move.w 6(a1,d0.w*8),d1
  5165.  ble  .canttell
  5166.  
  5167.  move.w (a2,d0.w*2),d3
  5168.  cmp.w leftclip,d3
  5169.  bgt.s .nol
  5170.  st d4
  5171.  st anyclipping
  5172.  bra.s .nos
  5173. .nol:
  5174.  cmp.w rightclip,d3
  5175.  blt.s .nor
  5176.  st d6
  5177.  st anyclipping
  5178.  bra.s .nos
  5179. .nor:
  5180.  st d5
  5181. .nos:
  5182.  bra .cantell
  5183.  
  5184. .canttell:
  5185.  st d5
  5186.  st anyclipping
  5187.  
  5188. .cantell:
  5189.  
  5190.  
  5191.  dbra d7,cornerprocessloop
  5192.  
  5193.  move.l (a7)+,a0
  5194.  tst.b d5
  5195.  bne.s somefloortodraw
  5196.  eor.b d4,d6
  5197.  bne dontdrawreturn
  5198.  
  5199. somefloortodraw:
  5200.  
  5201.  tst.b gourfloor
  5202.  bne goursides
  5203.  
  5204.  move.w #80,top
  5205.  move.w #-1,bottom
  5206.  move.w #0,drawit
  5207.  move.l #Rotated,a1
  5208.  move.l #OnScreen,a2
  5209.  move.w (a0)+,d7    ; no of sides
  5210. sideloop:
  5211.  move.w minz,d6
  5212.  move.w (a0)+,d1
  5213.  move.w (a0),d3
  5214.  move.w 6(a1,d1*8),d4    ;first z
  5215.  cmp.w d6,d4
  5216.  bgt firstinfront
  5217.  move.w 6(a1,d3*8),d5    ; sec z
  5218.  cmp.w d6,d5
  5219.  ble bothbehind
  5220. ** line must be on left and partially behind.
  5221.  sub.w d5,d4
  5222.  move.l (a1,d1*8),d0
  5223.  sub.l (a1,d3*8),d0
  5224.  asr.l #7,d0
  5225.  sub.w d5,d6
  5226.  muls d6,d0    ; new x coord
  5227.  divs d4,d0
  5228.  ext.l d0
  5229.  asl.l #7,d0
  5230.  
  5231.  add.l (a1,d3*8),d0
  5232.  move.w minz,d4
  5233.  move.w (a2,d3*2),d2
  5234.  divs d4,d0
  5235.  add.w #47,d0
  5236.  move.l ypos,d3
  5237.  divs d5,d3
  5238.  move.w bottomline,d1 
  5239.  bra lineclipped
  5240.  
  5241. firstinfront:
  5242.  move.w 6(a1,d3*8),d5    ; sec z
  5243.  cmp.w d6,d5
  5244.  bgt bothinfront
  5245. ** line must be on right and partially behind.
  5246.  sub.w d4,d5    ; dz
  5247.  move.l (a1,d3*8),d2
  5248.  sub.l (a1,d1*8),d2    ; dx
  5249.  sub.w d4,d6
  5250.  asr.l #7,d2
  5251.  muls d6,d2    ; new x coord
  5252.  divs d5,d2
  5253.  ext.l d2
  5254.  asl.l #7,d2
  5255.  add.l (a1,d1*8),d2
  5256.  move.w minz,d5
  5257.  move.w (a2,d1*2),d0
  5258.  divs d5,d2
  5259.  add.w #47,d2
  5260.  move.l ypos,d1
  5261.  divs d4,d1
  5262.  move.w bottomline,d3 
  5263.  bra lineclipped
  5264.  
  5265. bothinfront:
  5266.  
  5267. * Also, usefully enough, both are on-screen
  5268. * so no bottom clipping is needed.
  5269.  
  5270.  move.w (a2,d1*2),d0    ; first x
  5271.  move.w (a2,d3*2),d2    ; second x
  5272.  move.l ypos,d1
  5273.  move.l d1,d3
  5274.  divs d4,d1        ; first y
  5275.  divs d5,d3        ; second y
  5276. lineclipped:
  5277.  move.l #rightsidetab,a3
  5278.  cmp.w d1,d3
  5279.  beq lineflat
  5280.  st drawit
  5281.  bgt lineonright
  5282.  move.l #leftsidetab,a3
  5283.  exg d1,d3
  5284.  exg d0,d2
  5285.  
  5286.  lea (a3,d1*2),a3
  5287.  
  5288.  cmp.w top(pc),d1
  5289.  bge.s .nonewtop
  5290.  move.w d1,top
  5291. .nonewtop:
  5292.  cmp.w bottom(pc),d3
  5293.  ble.s .nonewbot
  5294.  move.w d3,bottom
  5295. .nonewbot:
  5296.  
  5297.  sub.w d1,d3    ; dy
  5298.  sub.w d0,d2    ; dx
  5299.  
  5300.  blt .linegoingleft
  5301.  sub.w #1,d0
  5302.  
  5303.  ext.l d2
  5304.  divs d3,d2
  5305.  move.w d2,d6
  5306.  swap d2
  5307.  
  5308. ; moveq #0,d6
  5309. ; sub.w d3,d2
  5310. ; blt.s .noco
  5311. ;.makeco
  5312. ; addq #1,d6
  5313. ; sub.w d3,d2
  5314. ; bge.s .makeco
  5315. ;.noco
  5316. ; add.w d3,d2
  5317.  
  5318.  move.w d3,d4
  5319.  move.w d3,d5
  5320.  subq #1,d5
  5321.  move.w d6,d1
  5322.  addq #1,d1
  5323.  
  5324. .pixlopright:
  5325.  move.w d0,(a3)+
  5326.  sub.w d2,d4
  5327.  bge.s .nobigstep
  5328.  add.w d1,d0
  5329.  add.w d3,d4
  5330.  dbra d5,.pixlopright
  5331.  bra lineflat
  5332. .nobigstep
  5333.  add.w d6,d0
  5334.  dbra d5,.pixlopright
  5335.  bra lineflat
  5336.  
  5337. .linegoingleft:
  5338.  
  5339.  sub.w #1,d0
  5340.  
  5341.  neg.w d2
  5342.  
  5343.  ext.l d2
  5344.  divs d3,d2
  5345.  move.w d2,d6
  5346.  swap d2
  5347.  
  5348.  
  5349. ; moveq #0,d6
  5350. ; sub.w d3,d2
  5351. ; blt.s .nocol
  5352. ;.makecol
  5353. ; addq #1,d6
  5354. ; sub.w d3,d2
  5355. ; bge.s .makecol
  5356. ;.nocol
  5357. ; add.w d3,d2
  5358.  
  5359.  
  5360.  
  5361.  move.w d3,d4
  5362.  move.w d3,d5
  5363.  subq #1,d5
  5364.  
  5365.  move.w d6,d1
  5366.  addq #1,d1
  5367.  
  5368. .pixlopleft:
  5369.  sub.w d2,d4
  5370.  bge.s .nobigstepl
  5371.  sub.w d1,d0
  5372.  add.w d3,d4
  5373.  move.w d0,(a3)+
  5374.  dbra d5,.pixlopleft
  5375.  bra lineflat
  5376.  
  5377. .nobigstepl
  5378.  sub.w d6,d0
  5379.  move.w d0,(a3)+
  5380.  dbra d5,.pixlopleft
  5381.  bra lineflat
  5382.  
  5383. lineonright:
  5384.  
  5385.  lea (a3,d1*2),a3
  5386.  
  5387.  cmp.w top(pc),d1
  5388.  bge.s .nonewtop
  5389.  move.w d1,top
  5390. .nonewtop:
  5391.  cmp.w bottom(pc),d3
  5392.  ble.s .nonewbot
  5393.  move.w d3,bottom
  5394. .nonewbot:
  5395.  
  5396.  sub.w d1,d3    ; dy
  5397.  sub.w d0,d2    ; dx
  5398.  blt .linegoingleft
  5399. ; addq #1,d0
  5400.  ext.l d2
  5401.  divs d3,d2
  5402.  move.w d2,d6
  5403.  swap d2
  5404.  
  5405. ; moveq #0,d6
  5406. ; sub.w d3,d2
  5407. ; blt.s .noco
  5408. ;.makeco
  5409. ; addq #1,d6
  5410. ; sub.w d3,d2
  5411. ; bge.s .makeco
  5412. ;.noco
  5413. ; add.w d3,d2
  5414.  
  5415.  move.w d3,d4
  5416.  move.w d3,d5
  5417.  subq #1,d5
  5418.  move.w d6,d1
  5419.  addq #1,d1
  5420.  
  5421. .pixlopright:
  5422.  sub.w d2,d4
  5423.  bge.s .nobigstep
  5424.  add.w d1,d0
  5425.  add.w d3,d4
  5426.  move.w d0,(a3)+
  5427.  dbra d5,.pixlopright
  5428.  bra lineflat
  5429.  
  5430. .nobigstep
  5431.  add.w d6,d0
  5432.  move.w d0,(a3)+
  5433.  dbra d5,.pixlopright
  5434.  bra lineflat
  5435.  
  5436. .linegoingleft:
  5437. ; addq #1,d0
  5438.  neg.w d2
  5439.  
  5440.  ext.l d2
  5441.  divs d3,d2
  5442.  move.w d2,d6
  5443.  swap d2
  5444.  
  5445.  
  5446. ; moveq #0,d6
  5447. ; sub.w d3,d2
  5448. ; blt.s .nocol
  5449. ;.makecol
  5450. ; addq #1,d6
  5451. ; sub.w d3,d2
  5452. ; bge.s .makecol
  5453. ;.nocol
  5454. ; add.w d3,d2
  5455.  
  5456.  move.w d3,d4
  5457.  move.w d3,d5
  5458.  subq #1,d5
  5459.  move.w d6,d1
  5460.  addq #1,d1
  5461.  
  5462. .pixlopleft:
  5463.  move.w d0,(a3)+
  5464.  sub.w d2,d4
  5465.  bge.s .nobigstepl
  5466.  sub.w d1,d0
  5467.  add.w d3,d4
  5468.  dbra d5,.pixlopleft
  5469.  bra lineflat
  5470.  
  5471. .nobigstepl
  5472.  sub.w d6,d0
  5473.  dbra d5,.pixlopleft
  5474.  
  5475. lineflat:
  5476.  
  5477. bothbehind:
  5478.  dbra d7,sideloop
  5479.  bra pastsides
  5480.  
  5481. fbr: dc.w 0
  5482. sbr: dc.w 0
  5483.  
  5484. goursides:
  5485.  
  5486.  move.w #80,top
  5487.  move.w #-1,bottom
  5488.  move.w #0,drawit
  5489.  move.l #Rotated,a1
  5490.  move.l #OnScreen,a2
  5491.  move.w (a0)+,d7    ; no of sides
  5492. sideloopGOUR:
  5493.  move.w minz,d6
  5494.  move.w (a0)+,d1
  5495.  move.w (a0),d3
  5496.  
  5497.  move.l PointBrightsPtr,a4
  5498.  move.w (a4,d1.w*4),fbr
  5499.  move.w (a4,d3.w*4),sbr
  5500.  
  5501.  move.w 6(a1,d1*8),d4    ;first z
  5502.  cmp.w d6,d4
  5503.  bgt firstinfrontGOUR
  5504.  move.w 6(a1,d3*8),d5    ; sec z
  5505.  cmp.w d6,d5
  5506.  ble bothbehindGOUR
  5507. ** line must be on left and partially behind.
  5508.  sub.w d5,d4
  5509.  
  5510.  move.w fbr,d0
  5511.  sub.w sbr,d0
  5512.  sub.w d5,d6
  5513.  muls d6,d0
  5514.  divs d4,d0
  5515.  add.w sbr,d0
  5516.  move.w d0,fbr
  5517.  
  5518.  move.l (a1,d1*8),d0
  5519.  sub.l (a1,d3*8),d0
  5520.  asr.l #7,d0
  5521.  muls d6,d0    ; new x coord
  5522.  divs d4,d0
  5523.  ext.l d0
  5524.  asl.l #7,d0
  5525.  
  5526.  add.l (a1,d3*8),d0
  5527.  move.w minz,d4
  5528.  move.w (a2,d3*2),d2
  5529.  divs d4,d0
  5530.  add.w #47,d0
  5531.  move.l ypos,d3
  5532.  divs d5,d3
  5533.  
  5534.  move.w bottomline,d1 
  5535.  bra lineclippedGOUR
  5536.  
  5537. firstinfrontGOUR:
  5538.  move.w 6(a1,d3*8),d5    ; sec z
  5539.  cmp.w d6,d5
  5540.  bgt bothinfrontGOUR
  5541. ** line must be on right and partially behind.
  5542.  sub.w d4,d5    ; dz
  5543.  
  5544.  move.w sbr,d2
  5545.  sub.w fbr,d2
  5546.  sub.w d4,d6
  5547.  muls d6,d2
  5548.  divs d5,d2
  5549.  add.w fbr,d2
  5550.  move.w d2,sbr
  5551.  
  5552.  move.l (a1,d3*8),d2
  5553.  sub.l (a1,d1*8),d2    ; dx
  5554.  asr.l #7,d2
  5555.  muls d6,d2    ; new x coord
  5556.  divs d5,d2
  5557.  ext.l d2
  5558.  asl.l #7,d2
  5559.  add.l (a1,d1*8),d2
  5560.  move.w minz,d5
  5561.  move.w (a2,d1*2),d0
  5562.  divs d5,d2
  5563.  add.w #47,d2
  5564.  move.l ypos,d1
  5565.  divs d4,d1
  5566.  move.w bottomline,d3 
  5567.  bra lineclippedGOUR
  5568.  
  5569. bothinfrontGOUR:
  5570.  
  5571. * Also, usefully enough, both are on-screen
  5572. * so no bottom clipping is needed.
  5573.  
  5574.  move.w (a2,d1*2),d0    ; first x
  5575.  move.w (a2,d3*2),d2    ; second x
  5576.  move.l ypos,d1
  5577.  move.l d1,d3
  5578.  divs d4,d1        ; first y
  5579.  divs d5,d3        ; second y
  5580. lineclippedGOUR:
  5581.  move.l #rightsidetab,a3
  5582.  cmp.w d1,d3
  5583.  bne linenotflatGOUR
  5584.  
  5585. ; move.w fbr,d4
  5586. ; move.w sbr,d5
  5587. ; cmp.w d0,d2
  5588. ; bgt.s .nsw
  5589. ; exg d4,d5
  5590. ;.nsw:
  5591.  
  5592. ; move.l #leftbrighttab,a3
  5593. ; move.w d4,(a3,d3.w)
  5594. ; move.l #rightbrighttab,a3
  5595. ; move.w d5,(a3,d3.w) 
  5596.  bra lineflatGOUR
  5597.  
  5598. linenotflatGOUR
  5599.  st drawit
  5600.  bgt lineonrightGOUR
  5601.  move.l #leftsidetab,a3
  5602.  exg d1,d3
  5603.  exg d0,d2
  5604.  
  5605.  lea (a3,d1*2),a3
  5606.  lea leftbrighttab-leftsidetab(a3),a4
  5607.  
  5608.  cmp.w top(pc),d1
  5609.  bge.s .nonewtop
  5610.  move.w d1,top
  5611. .nonewtop:
  5612.  cmp.w bottom(pc),d3
  5613.  ble.s .nonewbot
  5614.  move.w d3,bottom
  5615. .nonewbot:
  5616.  
  5617.  sub.w d1,d3    ; dy
  5618.  sub.w d0,d2    ; dx
  5619.  
  5620.  blt .linegoingleft
  5621.  sub.w #1,d0
  5622.  
  5623.  ext.l d2
  5624.  divs d3,d2
  5625.  move.w d2,d6
  5626.  swap d2
  5627.  move.w d2,a5
  5628.  
  5629. ; moveq #0,d6
  5630. ; sub.w d3,d2
  5631. ; blt.s .noco
  5632. ;.makeco
  5633. ; addq #1,d6
  5634. ; sub.w d3,d2
  5635. ; bge.s .makeco
  5636. ;.noco
  5637. ; add.w d3,d2
  5638.  
  5639.  move.w d3,d4
  5640.  move.w d3,d5
  5641.  subq #1,d5
  5642.  move.w d6,d1
  5643.  addq #1,d1
  5644.  move.w d1,a6
  5645.  
  5646.  moveq #0,d1
  5647.  move.w sbr,d1
  5648.  move.w fbr,d2
  5649.  sub.w d1,d2
  5650.  ext.l d2
  5651.  asl.w #8,d2
  5652.  asl.w #3,d2
  5653.  divs d3,d2 
  5654.  ext.l d2
  5655.  asl.l #5,d2
  5656.  swap d1
  5657.  
  5658. .pixlopright:
  5659.  move.w d0,(a3)+
  5660.  swap d1
  5661.  move.w d1,(a4)+
  5662.  swap d1
  5663.  add.l d2,d1
  5664.  
  5665.  sub.w a5,d4
  5666.  bge.s .nobigstep
  5667.  add.w a6,d0
  5668.  add.w d3,d4
  5669.  dbra d5,.pixlopright
  5670.  bra lineflatGOUR
  5671. .nobigstep
  5672.  
  5673.  add.w d6,d0
  5674.  dbra d5,.pixlopright
  5675.  bra lineflatGOUR
  5676.  
  5677. .linegoingleft:
  5678.  
  5679.  sub.w #1,d0
  5680.  
  5681.  neg.w d2
  5682.  
  5683.  ext.l d2
  5684.  divs d3,d2
  5685.  move.w d2,d6
  5686.  swap d2
  5687.  
  5688.  
  5689. ; moveq #0,d6
  5690. ; sub.w d3,d2
  5691. ; blt.s .nocol
  5692. ;.makecol
  5693. ; addq #1,d6
  5694. ; sub.w d3,d2
  5695. ; bge.s .makecol
  5696. ;.nocol
  5697. ; add.w d3,d2
  5698.  
  5699.  move.w d3,d4
  5700.  move.w d3,d5
  5701.  subq #1,d5
  5702.  
  5703.  move.w d6,d1
  5704.  addq #1,d1
  5705.  move.w d1,a6
  5706.  move.w d2,a5
  5707.  
  5708.  moveq #0,d1
  5709.  move.w sbr,d1
  5710.  move.w fbr,d2
  5711.  sub.w d1,d2
  5712.  ext.l d2
  5713.  asl.w #8,d2
  5714.  asl.w #3,d2
  5715.  divs d3,d2 
  5716.  ext.l d2
  5717.  asl.l #5,d2
  5718.  swap d1
  5719.  
  5720. .pixlopleft:
  5721.  
  5722.  swap d1
  5723.  move.w d1,(a4)+
  5724.  swap d1
  5725.  add.l d2,d1
  5726.  
  5727.  sub.w a5,d4
  5728.  bge.s .nobigstepl
  5729.  sub.w a6,d0
  5730.  add.w d3,d4
  5731.  move.w d0,(a3)+
  5732.  dbra d5,.pixlopleft
  5733.  bra lineflatGOUR
  5734.  
  5735. .nobigstepl
  5736.  sub.w d6,d0
  5737.  move.w d0,(a3)+
  5738.  dbra d5,.pixlopleft
  5739.  bra lineflatGOUR
  5740.  
  5741. lineonrightGOUR:
  5742.  
  5743.  lea (a3,d1*2),a3
  5744.  
  5745.  lea rightbrighttab-rightsidetab(a3),a4
  5746.  
  5747.  cmp.w top(pc),d1
  5748.  bge.s .nonewtop
  5749.  move.w d1,top
  5750. .nonewtop:
  5751.  cmp.w bottom(pc),d3
  5752.  ble.s .nonewbot
  5753.  move.w d3,bottom
  5754. .nonewbot:
  5755.  
  5756.  sub.w d1,d3    ; dy
  5757.  sub.w d0,d2    ; dx
  5758.  blt .linegoingleft
  5759. ; addq #1,d0
  5760.  ext.l d2
  5761.  divs d3,d2
  5762.  move.w d2,d6
  5763.  swap d2
  5764.  
  5765. ; moveq #0,d6
  5766. ; sub.w d3,d2
  5767. ; blt.s .noco
  5768. ;.makeco
  5769. ; addq #1,d6
  5770. ; sub.w d3,d2
  5771. ; bge.s .makeco
  5772. ;.noco
  5773. ; add.w d3,d2
  5774.  
  5775.  move.w d3,d4
  5776.  move.w d3,d5
  5777.  subq #1,d5
  5778.  move.w d6,d1
  5779.  addq #1,d1
  5780.  
  5781.  move.w d1,a6
  5782.  move.w d2,a5
  5783.  
  5784.  moveq #0,d1
  5785.  move.w fbr,d1
  5786.  move.w sbr,d2
  5787.  sub.w d1,d2
  5788.  ext.l d2
  5789.  asl.w #8,d2
  5790.  asl.w #3,d2
  5791.  divs d3,d2 
  5792.  ext.l d2
  5793.  asl.l #5,d2
  5794.  swap d1
  5795.  
  5796. .pixlopright:
  5797.  
  5798.  swap d1
  5799.  move.w d1,(a4)+
  5800.  swap d1
  5801.  add.l d2,d1
  5802.  
  5803.  sub.w a5,d4
  5804.  bge.s .nobigstep
  5805.  add.w a6,d0
  5806.  add.w d3,d4
  5807.  move.w d0,(a3)+
  5808.  dbra d5,.pixlopright
  5809.  bra lineflatGOUR
  5810.  
  5811. .nobigstep
  5812.  add.w d6,d0
  5813.  move.w d0,(a3)+
  5814.  dbra d5,.pixlopright
  5815.  bra lineflatGOUR
  5816.  
  5817. .linegoingleft:
  5818. ; addq #1,d0
  5819.  neg.w d2
  5820.  
  5821.  ext.l d2
  5822.  divs d3,d2
  5823.  move.w d2,d6
  5824.  swap d2
  5825.  
  5826.  
  5827. ; moveq #0,d6
  5828. ; sub.w d3,d2
  5829. ; blt.s .nocol
  5830. ;.makecol
  5831. ; addq #1,d6
  5832. ; sub.w d3,d2
  5833. ; bge.s .makecol
  5834. ;.nocol
  5835. ; add.w d3,d2
  5836.  
  5837.  move.w d3,d4
  5838.  move.w d3,d5
  5839.  subq #1,d5
  5840.  move.w d6,d1
  5841.  addq #1,d1
  5842.  move.w d1,a6
  5843.  move.w d2,a5
  5844.  
  5845.  moveq #0,d1
  5846.  move.w fbr,d1
  5847.  move.w sbr,d2
  5848.  sub.w d1,d2
  5849.  ext.l d2
  5850.  asl.w #8,d2
  5851.  asl.w #3,d2
  5852.  divs d3,d2 
  5853.  ext.l d2
  5854.  asl.l #5,d2
  5855.  swap d1
  5856.  
  5857. .pixlopleft:
  5858.  
  5859.  swap d1
  5860.  move.w d1,(a4)+
  5861.  swap d1
  5862.  add.l d2,d1
  5863.  
  5864.  move.w d0,(a3)+
  5865.  sub.w a5,d4
  5866.  bge.s .nobigstepl
  5867.  sub.w a6,d0
  5868.  add.w d3,d4
  5869.  dbra d5,.pixlopleft
  5870.  bra lineflatGOUR
  5871.  
  5872. .nobigstepl
  5873.  sub.w d6,d0
  5874.  dbra d5,.pixlopleft
  5875.  
  5876. lineflatGOUR:
  5877.  
  5878. bothbehindGOUR:
  5879.  dbra d7,sideloopGOUR
  5880.  
  5881. pastsides:
  5882.  
  5883.  
  5884.  addq #2,a0
  5885.  
  5886.  move.w #104*4,linedir
  5887.  move.l frompt,a6
  5888.  add.l #104*4*41,a6
  5889.  move.w (a0)+,scaleval
  5890.  move.w (a0)+,whichtile
  5891.  move.w (a0)+,d6
  5892.  add.w ZoneBright,d6
  5893.  move.w d6,lighttype
  5894.  move.w above(pc),d6
  5895.  beq groundfloor
  5896. * on ceiling:
  5897.  move.w #-104*4,linedir
  5898.  suba.w #104*4,a6
  5899. groundfloor:
  5900.  
  5901.  move.w xoff,d6
  5902.  move.w zoff,d7
  5903.  add.w xwobxoff,d7
  5904.  add.w xwobzoff,d6
  5905.  swap d6
  5906.  swap d7
  5907.  clr.w d6
  5908.  clr.w d7
  5909.  move.w scaleval(pc),d3
  5910.  beq.s .samescale
  5911.  bgt.s .scaledown
  5912.  neg.w d3
  5913.  asr.l d3,d7
  5914.  asr.l d3,d6
  5915.  bra.s .samescale
  5916. .scaledown:
  5917.  asl.l d3,d6
  5918.  asl.l d3,d7
  5919. .samescale
  5920.  move.l d6,sxoff
  5921.  move.l d7,szoff
  5922.  bra pastscale 
  5923.  
  5924.  asr.l #3,d1
  5925.  asr.l #3,d2
  5926.  asr.l #2,d1
  5927.  asr.l #2,d2
  5928.  asr.l #1,d1
  5929.  asr.l #1,d2
  5930. scaleprogfrom
  5931.  nop
  5932.  nop
  5933.  asl.l #1,d1
  5934.  asl.l #1,d2
  5935.  asl.l #2,d1
  5936.  asl.l #2,d2
  5937.  asl.l #3,d1
  5938.  asl.l #3,d2
  5939.  
  5940. top: dc.w 0
  5941. bottom: dc.w 0
  5942. ypos: dc.l 0
  5943. nfloors: dc.w 0
  5944. lighttype: dc.w 0
  5945. above: dc.w 0 
  5946. linedir: dc.w 0
  5947. distaddr: dc.w 0
  5948.  
  5949. minz: dc.w 0
  5950. leftsidetab:
  5951.  ds.w 180
  5952. rightsidetab:
  5953.  ds.w 180
  5954. leftbrighttab:
  5955.  ds.w 180
  5956. rightbrighttab:
  5957.  ds.w 180
  5958.  
  5959. PointBrights:
  5960.  dc.l 0
  5961. CurrentPointBrights:
  5962.  ds.l 1000
  5963.  
  5964. movespd: dc.w 0
  5965. largespd: dc.l 0
  5966. disttobot: dc.w 0
  5967.  
  5968. pastscale:
  5969.  
  5970.  tst.b drawit(pc)
  5971.  beq dontdrawfloor
  5972.  
  5973.  move.l a0,-(a7)
  5974.  
  5975.  move.l #leftsidetab,a4
  5976.  move.w top(pc),d1
  5977.  
  5978.  move.w #39,d7
  5979.  sub.w d1,d7
  5980.  move.w d7,disttobot
  5981.  
  5982.  move.w bottom(pc),d7
  5983.  tst.w above
  5984.  beq.s clipfloor
  5985.  
  5986.  move.w #40,d3
  5987.  move.w d3,d4
  5988.  sub.w topclip,d3
  5989.  sub.w botclip,d4
  5990.  cmp.w d3,d1
  5991.  bge predontdrawfloor
  5992.  cmp.w d4,d7
  5993.  blt predontdrawfloor
  5994.  cmp.w d4,d1
  5995.  bge.s .nocliptoproof
  5996.  move.w d4,d1
  5997. .nocliptoproof
  5998.  cmp.w d3,d7
  5999.  blt doneclip
  6000.  move.w d3,d7
  6001.  bra doneclip
  6002.  
  6003. clipfloor:
  6004.  move.w botclip,d4
  6005.  sub.w #40,d4
  6006.  cmp.w d4,d1
  6007.  bge predontdrawfloor
  6008.  move.w topclip,d3
  6009.  sub.w #40,d3
  6010.  cmp.w d3,d1
  6011.  bge.s .nocliptopfloor
  6012.  move.w d3,d1
  6013. .nocliptopfloor 
  6014.  cmp.w d3,d7
  6015.  ble predontdrawfloor
  6016.  cmp.w d4,d7
  6017.  blt.s .noclipbotfloor
  6018.  move.w d4,d7
  6019. .noclipbotfloor:
  6020.  
  6021. doneclip:
  6022.  
  6023.  lea (a4,d1*2),a4
  6024. ; move.l #dists,a2
  6025.  move.w distaddr,d0
  6026.  muls #64,d0
  6027.  move.l d0,a2
  6028. ; muls #25,d0
  6029. ; adda.w d0,a2
  6030. ; lea (a2,d1*2),a2
  6031.  sub.w d1,d7
  6032.  ble predontdrawfloor 
  6033.  move.w d1,d0
  6034.  bne.s .notzero
  6035.  moveq #1,d0
  6036. .notzero
  6037.  muls linedir,d1
  6038.  add.l d1,a6
  6039.  move.l #floorscalecols,a1
  6040.  move.l LineToUse,a5
  6041.  
  6042.  tst.b gourfloor
  6043.  bne dogourfloor
  6044.  
  6045.  tst.b anyclipping
  6046.  beq dofloornoclip
  6047.  
  6048. dofloor:
  6049. ; move.w (a2)+,d0
  6050.  move.w leftclip(pc),d3
  6051.  move.w rightclip(pc),d4
  6052.  move.w rightsidetab-leftsidetab(a4),d2
  6053.  
  6054.  addq #1,d2
  6055.  cmp.w d3,d2
  6056.  ble.s nodrawline
  6057.  cmp.w d4,d2
  6058.  ble.s noclipright
  6059.  move.w d4,d2
  6060. noclipright:
  6061.  move.w (a4),d1
  6062.  cmp.w d4,d1
  6063.  bge.s nodrawline
  6064.  cmp.w d3,d1
  6065.  bge.s noclipleft
  6066.  move.w d3,d1
  6067. noclipleft:
  6068.  cmp.w d1,d2
  6069.  ble.s nodrawline
  6070.  
  6071.  move.w d1,leftedge
  6072.  move.w d2,rightedge
  6073.  
  6074. ; moveq #0,d1
  6075. ; moveq #0,d3
  6076. ; move.w leftbrighttab-leftsidetab(a4),d1
  6077. ; bge.s .okbl
  6078. ; moveq #0,d1
  6079. ;.okbl:
  6080.  
  6081. ; move.w rightbrighttab-leftsidetab(a4),d3
  6082. ; bge.s .okbr
  6083. ; moveq #0,d3
  6084. ;.okbr:
  6085.  
  6086. ; sub.w d1,d3
  6087. ; asl.w #8,d1
  6088. ; move.l d1,leftbright
  6089. ; swap d3
  6090. ; asr.l #5,d3
  6091. ; divs d5,d3
  6092. ; move.w d3,d5
  6093. ; muls.w d6,d5
  6094. ; asr.l #3,d5
  6095. ; clr.b d5
  6096. ; add.w d5,leftbright+2
  6097.  
  6098. ; ext.l d3
  6099. ; asl.l #5,d3
  6100. ; swap d3
  6101. ; asl.w #8,d3
  6102. ; move.l d3,brightspd
  6103.  
  6104.  move.l a6,a3
  6105.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6106.  move.l a2,d7
  6107.  divs d0,d7
  6108.  move.w d7,d0
  6109.  jsr (a5)
  6110.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6111. nodrawline
  6112.  sub.w #1,disttobot
  6113.  adda.w linedir(pc),a6
  6114.  addq #2,a4
  6115.  addq #1,d0
  6116.  subq #1,d7
  6117.  bgt dofloor
  6118.  
  6119. predontdrawfloor
  6120.  move.l (a7)+,a0
  6121.  
  6122. dontdrawfloor:
  6123.  
  6124.  rts
  6125.  
  6126. anyclipping: dc.w 0
  6127.  
  6128. dofloornoclip:
  6129. ; move.w (a2)+,d0
  6130.  move.w rightsidetab-leftsidetab(a4),d2
  6131.  addq #1,d2
  6132.  move.w (a4)+,d1
  6133.  move.w d1,leftedge
  6134.  move.w d2,rightedge
  6135.  
  6136. ; sub.w d1,d2
  6137.  
  6138. ; moveq #0,d1
  6139. ; moveq #0,d3
  6140. ; move.w leftbrighttab-leftsidetab(a4),d1
  6141. ; bge.s .okbl
  6142. ; moveq #0,d1
  6143. ;.okbl:
  6144.  
  6145. ; move.w rightbrighttab-leftsidetab(a4),d3
  6146. ; bge.s .okbr
  6147. ; moveq #0,d3
  6148. ;.okbr:
  6149.  
  6150. ; sub.w d1,d3
  6151. ; asl.w #8,d1
  6152. ; move.l d1,leftbright
  6153. ; swap d3
  6154. ; asr.l #5,d3
  6155. ; divs d2,d3
  6156. ; ext.l d3
  6157. ; asl.l #5,d3
  6158. ; swap d3
  6159. ; asl.w #8,d3
  6160. ; move.l d3,brightspd
  6161.  
  6162.  move.l a6,a3
  6163.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6164.  move.l a2,d7
  6165.  divs d0,d7
  6166.  move.w d7,d0
  6167.  jsr (a5)
  6168.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6169.  sub.w #1,disttobot
  6170.  adda.w linedir(pc),a6
  6171.  addq #1,d0
  6172.  subq #1,d7
  6173.  bgt dofloornoclip
  6174.  
  6175.  bra predontdrawfloor
  6176.  
  6177. dogourfloor:
  6178.  tst.b anyclipping
  6179.  beq dofloornoclipGOUR
  6180.  
  6181. dofloorGOUR:
  6182. ; move.w (a2)+,d0
  6183.  move.w leftclip(pc),d3
  6184.  move.w rightclip(pc),d4
  6185.  move.w rightsidetab-leftsidetab(a4),d2
  6186.  
  6187.  move.w d2,d5
  6188.  sub.w (a4),d5
  6189.  addq #1,d5
  6190.  moveq #0,d6
  6191.  
  6192.  addq #1,d2
  6193.  cmp.w d3,d2
  6194.  ble nodrawlineGOUR
  6195.  cmp.w d4,d2
  6196.  ble.s nocliprightGOUR
  6197.  move.w d4,d2
  6198. nocliprightGOUR:
  6199.  move.w (a4),d1
  6200.  cmp.w d4,d1
  6201.  bge nodrawlineGOUR
  6202.  cmp.w d3,d1
  6203.  bge.s noclipleftGOUR
  6204.  move.w d3,d6
  6205.  subq #1,d6
  6206.  sub.w d1,d6
  6207.  move.w d3,d1
  6208. noclipleftGOUR:
  6209.  cmp.w d1,d2
  6210.  ble nodrawlineGOUR
  6211.  
  6212.  move.w d1,leftedge
  6213.  move.w d2,rightedge
  6214.  
  6215.  move.l a2,d2
  6216.  divs d0,d2
  6217.  move.w d2,dst
  6218.  asr.w #7,d2
  6219. ; addq #5,d2
  6220. ; add.w lighttype,d2
  6221.  
  6222.  moveq #0,d1
  6223.  moveq #0,d3
  6224.  move.w leftbrighttab-leftsidetab(a4),d1
  6225.  add.w d2,d1
  6226.  bge.s .okbl
  6227.  moveq #0,d1
  6228. .okbl:
  6229.  asr.w #1,d1
  6230.  cmp.w #14,d1
  6231.  ble.s .okdl
  6232.  move.w #14,d1
  6233. .okdl:
  6234.  
  6235.  move.w rightbrighttab-leftsidetab(a4),d3
  6236.  add.w d2,d3
  6237.  bge.s .okbr
  6238.  moveq #0,d3
  6239. .okbr:
  6240.  asr.w #1,d3
  6241.  cmp.w #14,d3
  6242.  ble.s .okdr
  6243.  move.w #14,d3
  6244. .okdr:
  6245.  
  6246.  sub.w d1,d3
  6247.  asl.w #8,d1
  6248.  move.l d1,leftbright
  6249.  swap d3
  6250.  tst.l d3
  6251.  bgt.s .OKITSPOSALREADY 
  6252.  neg.l d3
  6253.  asr.l #5,d3
  6254.  divs d5,d3
  6255.  neg.w d3
  6256.  bra.s .OKNOWITSNEG
  6257.  
  6258. .OKITSPOSALREADY
  6259.  asr.l #5,d3
  6260.  divs d5,d3
  6261. .OKNOWITSNEG
  6262.  muls d3,d6
  6263.  add.w #256*8,d6
  6264.  asr.w #3,d6
  6265.  clr.b d6
  6266.  add.w d6,leftbright+2
  6267.  
  6268.  ext.l d3
  6269.  asl.l #5,d3
  6270.  swap d3
  6271.  asl.w #8,d3
  6272.  move.l d3,brightspd
  6273.  
  6274.  move.l a6,a3
  6275.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6276.  move.w dst,d0
  6277.  lea floorscalecols,a1
  6278.  move.l floortile,a0
  6279.  adda.w whichtile,a0
  6280.  jsr pastfloorbright
  6281.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6282. nodrawlineGOUR
  6283.  
  6284.  sub.w #1,disttobot
  6285.  
  6286.  adda.w linedir(pc),a6
  6287.  addq #2,a4
  6288.  addq #1,d0
  6289.  subq #1,d7
  6290.  bgt dofloorGOUR
  6291.  
  6292. predontdrawfloorGOUR
  6293.  move.l (a7)+,a0
  6294.  
  6295. dontdrawfloorGOUR:
  6296.  
  6297.  rts
  6298.  
  6299. dofloornoclipGOUR:
  6300. ; move.w (a2)+,d0
  6301.  move.w rightsidetab-leftsidetab(a4),d2
  6302.  addq #1,d2
  6303.  move.w (a4),d1
  6304.  move.w d1,leftedge
  6305.  move.w d2,rightedge
  6306.  
  6307.  sub.w d1,d2
  6308.  
  6309.  move.l a2,d6
  6310.  divs d0,d6
  6311.  move.w d6,d5
  6312.  asr.w #7,d5
  6313. ; addq #5,d5
  6314. ; add.w lighttype,d5
  6315.  
  6316.  moveq #0,d1
  6317.  moveq #0,d3
  6318.  move.w leftbrighttab-leftsidetab(a4),d1
  6319.  add.w d5,d1
  6320.  bge.s .okbl
  6321.  moveq #0,d1
  6322. .okbl:
  6323.  asr.w #1,d1
  6324.  cmp.w #14,d1
  6325.  ble.s .okdl
  6326.  move.w #14,d1
  6327. .okdl:
  6328.  
  6329.  move.w rightbrighttab-leftsidetab(a4),d3
  6330.  add.w d5,d3
  6331.  bge.s .okbr
  6332.  moveq #0,d3
  6333. .okbr:
  6334.  asr.w #1,d3
  6335.  cmp.w #14,d3
  6336.  ble.s .okdr
  6337.  move.w #14,d3
  6338. .okdr:
  6339.  
  6340.  sub.w d1,d3
  6341.  asl.w #8,d1
  6342.  move.l d1,leftbright
  6343.  swap d3
  6344.  asr.l #5,d3
  6345.  divs d2,d3
  6346.  ext.l d3
  6347.  asl.l #5,d3
  6348.  swap d3
  6349.  asl.w #8,d3
  6350.  move.l d3,brightspd
  6351.  
  6352.  
  6353.  move.l a6,a3
  6354.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6355.  move.w d6,d0
  6356.  move.w d0,dst
  6357.  lea floorscalecols,a1
  6358.  move.l floortile,a0
  6359.  adda.w whichtile,a0
  6360.  jsr pastfloorbright
  6361.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6362.  sub.w #1,disttobot
  6363.  adda.w linedir(pc),a6
  6364.  addq #2,a4
  6365.  addq #1,d0
  6366.  subq #1,d7
  6367.  bgt dofloornoclipGOUR
  6368.  
  6369.  bra predontdrawfloorGOUR
  6370.  
  6371.  
  6372.  
  6373. dists:
  6374. ; incbin "floordists"
  6375. drawit: dc.w 0
  6376.  
  6377. LineToUse: dc.l 0
  6378.  
  6379. ***************************
  6380. * Right then, time for the floor
  6381. * routine...
  6382. * For test purposes, give it
  6383. * a3 = point to screen
  6384. * d0= z distance away
  6385. * and sinval+cosval must be set up.
  6386. ***************************
  6387.  
  6388. BLACKFLOOR:
  6389.  moveq #0,d0
  6390.  bra.s DOBLACK
  6391.  
  6392. SimpleFloorLine:
  6393.  
  6394.  CACHE_OFF d2
  6395.  
  6396.  move.l #doacrossline,a1
  6397.  move.w leftedge(pc),d1
  6398.  move.w rightedge(pc),d3
  6399.  sub.w d1,d3
  6400.  lea (a1,d1.w*4),a1
  6401.  move.w (a1,d3.w*4),d4
  6402.  move.w #$4e75,(a1,d3.w*4)
  6403.  
  6404.  tst.b CLRNOFLOOR
  6405.  bne.s BLACKFLOOR
  6406.  
  6407.  move.l #PLAINSCALE,a2
  6408.  
  6409.  move.w d0,d2
  6410.  move.w lighttype,d1
  6411.  asr.w #8,d2
  6412.  add.w #5,d1
  6413.  add.w d2,d1
  6414.  bge.s .fixedbright
  6415.  moveq #0,d1
  6416. .fixedbright:
  6417.  cmp.w #28,d1
  6418.  ble.s .smallbright
  6419.  move.w #28,d1
  6420. .smallbright:
  6421.  lea (a2,d1.w*2),a2
  6422.  
  6423.  move.w whichtile,d0
  6424.  move.w d0,d1
  6425.  and.w #$3,d1
  6426.  and.w #$300,d0
  6427.  lsl.b #6,d1
  6428.  move.b d1,d0
  6429.  move.w d0,tstwhich
  6430.  move.w (a2,d0.w),d0
  6431.  
  6432. DOBLACK:
  6433.  jsr (a1)
  6434.  move.w d4,(a1,d3.w*4)
  6435.  
  6436.  CACHE_ON d2
  6437.  
  6438.  rts
  6439.  
  6440. tstwhich: dc.w 0
  6441. whichtile: dc.w 0
  6442.   
  6443. PLAINSCALE: incbin "ab3:includes/plainscale"
  6444.   
  6445. storeit: dc.l 0
  6446.  
  6447. doacrossline:
  6448. val SET 0
  6449.  REPT 32
  6450.  move.w d0,val(a3)
  6451. val SET val+4
  6452.  ENDR
  6453. val SET val+4
  6454.  REPT 32
  6455.  move.w d0,val(a3)
  6456. val SET val+4
  6457.  ENDR
  6458. val SET val+4
  6459.  REPT 32
  6460.  move.w d0,val(a3)
  6461. val SET val+4
  6462.  ENDR
  6463.  rts
  6464.  
  6465.  
  6466. leftedge: dc.w 0
  6467. rightedge: dc.w 0
  6468.  
  6469. rndpt: dc.l rndtab
  6470.  
  6471.  
  6472. dst: dc.w 0
  6473.  
  6474. FloorLine:
  6475.  
  6476.  move.l floortile,a0
  6477.  adda.w whichtile,a0
  6478.  move.w lighttype,d1
  6479.  move.w d0,dst
  6480.  move.w d0,d2
  6481. *********************
  6482. * Old version
  6483.  asr.w #8,d2
  6484.  add.w #5,d1
  6485. *********************
  6486. ; asr.w #3,d2
  6487. ; sub.w #4,d2
  6488. ; cmp.w #6,d2
  6489. ; blt.s flbrbr
  6490. ; move.w #6,d2
  6491. ;flbrbr:
  6492. *********************
  6493.  add.w d2,d1
  6494.  bge.s .fixedbright
  6495.  moveq #0,d1
  6496. .fixedbright:
  6497.  cmp.w #28,d1
  6498.  ble.s .smallbright
  6499.  move.w #28,d1
  6500. .smallbright:
  6501.  lea floorscalecols,a1
  6502.  add.l floorbright(pc,d1.w*4),a1
  6503.  bra pastfloorbright
  6504.  
  6505. ConstCol: dc.w 0
  6506.  
  6507. BumpLine:
  6508.  
  6509.  tst.b smoothbumps
  6510.  beq.s Chunky
  6511.  
  6512.  move.l #SmoothTile,a0
  6513.  lea Smoothscalecols,a1
  6514.  bra pastast
  6515.  
  6516. Chunky:
  6517.  
  6518.  moveq #0,d2
  6519.  move.l #Bumptile,a0
  6520.  move.w whichtile,d2
  6521.  adda.w d2,a0
  6522.  ror.l #2,d2
  6523.  lsr.w #6,d2
  6524.  rol.l #2,d2
  6525.  and.w #15,d2
  6526.  move.l #ConstCols,a1
  6527.  move.w (a1,d2.w*2),ConstCol
  6528.  lea Bumpscalecols,a1
  6529.  
  6530. pastast:
  6531.  move.w lighttype,d1
  6532.  
  6533.  move.w d0,dst
  6534.  
  6535.  move.w d0,d2
  6536. *********************
  6537. * Old version
  6538.  asr.w #8,d2
  6539.  add.w #5,d1
  6540. *********************
  6541. ; asr.w #3,d2
  6542. ; sub.w #4,d2
  6543. ; cmp.w #6,d2
  6544. ; blt.s flbrbr
  6545. ; move.w #6,d2
  6546. ;flbrbr:
  6547. *********************
  6548.  add.w d2,d1
  6549.  bge.s .fixedbright
  6550.  moveq #0,d1
  6551. .fixedbright:
  6552.  cmp.w #28,d1
  6553.  ble.s .smallbright
  6554.  move.w #28,d1
  6555. .smallbright:
  6556.  add.l floorbright(pc,d1.w*4),a1
  6557.  bra pastfloorbright
  6558.  
  6559.  
  6560. floorbright:
  6561.  dc.l 512*0
  6562.  dc.l 512*1
  6563.  dc.l 512*1
  6564.  dc.l 512*2
  6565.  dc.l 512*2
  6566.  
  6567.  dc.l 512*3
  6568.  dc.l 512*3
  6569.  dc.l 512*4
  6570.  dc.l 512*4
  6571.  dc.l 512*5
  6572.  
  6573.  dc.l 512*5
  6574.  dc.l 512*6
  6575.  dc.l 512*6
  6576.  dc.l 512*7
  6577.  dc.l 512*7
  6578.  
  6579.  dc.l 512*8
  6580.  dc.l 512*8
  6581.  dc.l 512*9
  6582.  dc.l 512*9
  6583.  dc.l 512*10
  6584.  
  6585.  dc.l 512*10
  6586.  dc.l 512*11
  6587.  dc.l 512*11
  6588.  dc.l 512*12
  6589.  dc.l 512*12
  6590.  
  6591.  dc.l 512*13
  6592.  dc.l 512*13
  6593.  dc.l 512*14
  6594.  dc.l 512*14
  6595.  
  6596. widthleft: dc.w 0
  6597. scaleval: dc.w 0
  6598. sxoff: dc.l 0
  6599. szoff: dc.l 0
  6600. xoff34: dc.w 0
  6601. zoff34: dc.w 0
  6602. scosval: dc.w 0
  6603. ssinval: dc.w 0
  6604.  
  6605.  
  6606. floorsetbright:
  6607.  move.l #walltiles,a0
  6608.  
  6609. pastfloorbright
  6610.  
  6611.  move.w d0,d1
  6612.  muls cosval,d1    ; change in x across whole width
  6613.  move.w d0,d2
  6614.  muls sinval,d2    ; change in z across whole width
  6615.  neg.l d2
  6616. scaleprog:
  6617.  move.w scaleval(pc),d3
  6618.  beq.s .samescale
  6619.  bgt.s .scaledown
  6620.  neg.w d3
  6621.  asr.l d3,d1
  6622.  asr.l d3,d2
  6623.  bra.s .samescale
  6624. .scaledown:
  6625.  asl.l d3,d1
  6626.  asl.l d3,d2
  6627. .samescale
  6628.  
  6629.  move.l d1,d3 ;    z cos
  6630.  move.l d3,d6
  6631.  move.l d3,d5
  6632.  asr.l #1,d6
  6633.  add.l d6,d3
  6634.  asr.l #1,d3
  6635.  
  6636.  move.l d2,d4    ; z sin
  6637.  move.l d4,d6
  6638.  asr.l #1,d6
  6639.  add.l d4,d6
  6640.  add.l d3,d4
  6641.  neg.l d4    ; start x
  6642.  
  6643.  asr.l #1,d6    ; zsin/2
  6644.  sub.l d6,d5    ; start z
  6645.  
  6646.  add.l sxoff,d4
  6647.  add.l szoff,d5
  6648.  
  6649.  moveq #0,d6
  6650.  move.w leftedge(pc),d6
  6651.  beq.s nomultleft
  6652.  
  6653.  move.l d1,a4
  6654.  move.l d2,a5
  6655.  
  6656.  muls.l d6,d3:d1
  6657.  asr.l #6,d1
  6658.  add.l d1,d4
  6659.  
  6660.  muls.l d6,d3:d2
  6661.  asr.l #6,d2
  6662.  add.l d2,d5
  6663.  move.l a4,d1
  6664.  move.l a5,d2
  6665.  
  6666. nomultleft:
  6667.  
  6668.  move.w d4,startsmoothx
  6669.  move.w d5,startsmoothz
  6670.  
  6671.  swap d4
  6672.  asr.l #8,d5
  6673. ; add.w szoff,d5
  6674. ; add.w sxoff,d4
  6675.  and.w #63,d4
  6676.  and.w #63*256,d5
  6677.  move.b d4,d5
  6678.  
  6679.  asr.l #6,d1
  6680.  asr.l #6,d2
  6681.  move.w d1,a4
  6682.  move.w d2,a5
  6683.  asr.l #8,d2
  6684.  and.w #%0011111100000000,d2
  6685.  swap d1
  6686.  add.w d1,d2
  6687.  move.w #%11111100111111,d1
  6688.  and.w d1,d5
  6689.  swap d5
  6690.  move.w startsmoothz,d5
  6691.  swap d5
  6692.  swap d2
  6693.  move.w a5,d2
  6694.  swap d2
  6695.  
  6696. ***********************************
  6697.  
  6698.  move.w d6,a2
  6699.  move.l d2,d6
  6700.  add.w #256,d6
  6701.  
  6702.  moveq #0,d0
  6703.  
  6704.  tst.w a2
  6705.  beq startatleftedge
  6706.  
  6707.  move.w widthleft(pc),d4
  6708.  
  6709.  move.w rightedge(pc),d3
  6710.  
  6711.  cmp.w #31,a2
  6712.  bgt.s notinfirststrip
  6713.  lea (a3,a2.w*4),a3
  6714.  cmp.w #32,d3
  6715.  ble.s allinfirststrip
  6716.  move.w #32,d7
  6717.  sub.w d7,d3
  6718.  sub.w a2,d7
  6719.  bra intofirststrip
  6720.  
  6721. allinfirststrip
  6722.  sub.w a2,d3
  6723.  move.w d3,d7
  6724.  move.w #0,d4
  6725.  bra allintofirst
  6726.  
  6727. notinfirststrip:
  6728.  sub.w #32,a2
  6729.  sub.w #32,d3
  6730.  adda.w #33*4,a3
  6731.  cmp.w #31,a2
  6732.  bgt.s notstartinsec
  6733.  lea (a3,a2.w*4),a3
  6734.  cmp.w #32,d3
  6735.  ble.s allinsecstrip
  6736.  move.w #32,d7
  6737.  sub.w d7,d3
  6738.  sub.w a2,d7
  6739.  move.w d3,d4
  6740.  bra allintofirst
  6741.  
  6742. allinsecstrip
  6743.  sub.w a2,d3
  6744.  move.w d3,d7
  6745.  move.w #0,d4
  6746.  bra allintofirst
  6747.  rts
  6748.  
  6749. prot8: dc.w 0
  6750.  
  6751. notstartinsec:
  6752.  sub.w #32,a2
  6753.  sub.w #32,d3
  6754.  adda.w #33*4,a3
  6755.  lea (a3,a2.w*4),a3
  6756.  cmp.w #32,d3
  6757.  ble.s allinthirdstrip
  6758.  move.w #32,d7
  6759.  sub.w d7,d3
  6760.  sub.w a2,d7
  6761.  move.w d3,d4
  6762.  bra allintofirst
  6763.  rts
  6764.  
  6765. allinthirdstrip
  6766.  sub.w a2,d3
  6767.  move.w d3,d7
  6768.  move.w #0,d4
  6769.  bra allintofirst
  6770.  rts
  6771.  
  6772. startatleftedge:
  6773.  
  6774.  move.w rightedge(pc),d3
  6775.  sub.w a2,d3
  6776.  
  6777.  move.w d3,d7
  6778.  cmp.w #32,d7
  6779.  ble.s .notoowide
  6780.  move.w #32,d7
  6781. .notoowide:
  6782.  sub.w d7,d3
  6783. intofirststrip:
  6784.  
  6785.  move.w d3,d4
  6786. allintofirst:
  6787.  
  6788.  move.w startsmoothx,d3
  6789.  
  6790. tstwat:
  6791.  
  6792.  tst.b gourfloor
  6793.  bne gouraudfloor
  6794.  
  6795.  tst.b usewater
  6796.  bne texturedwater
  6797.  
  6798.  
  6799. ******************************
  6800. * BumpMap the floor/ceiling! *
  6801.  tst.b usebumps
  6802.  bne.s BumpMap
  6803. ******************************
  6804.  
  6805. ordinary:
  6806.  moveq #0,d0
  6807.  
  6808.  dbra d7,acrossscrn
  6809.  rts
  6810.  
  6811. usebumps: dc.w $0
  6812. smoothbumps: dc.w $0
  6813. gourfloor: dc.w 0
  6814.  
  6815.  include "ab3:source/bumpmap.s"
  6816.  
  6817.  CNOP 0,4
  6818. backbefore:
  6819.  and.w d1,d5
  6820.  move.b (a0,d5.w*4),d0
  6821.  add.w a4,d3
  6822.  move.w (a1,d0.w*2),(a3)
  6823.  addq #4,a3
  6824.  addx.l d6,d5
  6825.  dbcs d7,acrossscrn
  6826.  dbcc d7,backbefore
  6827.  bra.s past1
  6828.  
  6829. acrossscrn:
  6830.  and.w d1,d5
  6831.  move.b (a0,d5.w*4),d0
  6832.  add.w a4,d3
  6833.  move.w (a1,d0.w*2),(a3)
  6834.  addq #4,a3
  6835.  addx.l d2,d5
  6836.  dbcs d7,acrossscrn
  6837.  dbcc d7,backbefore
  6838. past1:
  6839.  bcc.s gotoacross
  6840.  
  6841.  move.w d4,d7
  6842.  bne.s .notdoneyet
  6843.  rts
  6844. .notdoneyet:
  6845.  
  6846.  cmp.w #32,d7
  6847.  ble.s .notoowide
  6848.  move.w #32,d7
  6849. .notoowide
  6850.  sub.w d7,d4  
  6851.  addq #4,a3
  6852.  
  6853.  dbra d7,backbefore
  6854.  rts
  6855.  
  6856.  
  6857. gotoacross:
  6858.  
  6859.  move.w d4,d7
  6860.  bne.s .notdoneyet
  6861.  rts
  6862. .notdoneyet:
  6863.  
  6864.  cmp.w #32,d7
  6865.  ble.s .notoowide
  6866.  move.w #32,d7
  6867. .notoowide
  6868.  sub.w d7,d4  
  6869.  addq #4,a3
  6870.  
  6871.  dbra d7,acrossscrn
  6872.  rts
  6873.  
  6874. leftbright: dc.l 0
  6875. brightspd: dc.l 0
  6876.  
  6877. gouraudfloor:
  6878.  move.l leftbright,d0
  6879.  move.l brightspd,d1
  6880.  dbra d7,acrossscrngour
  6881.  rts
  6882.  
  6883.  CNOP 0,4
  6884. backbeforegour:
  6885.  and.w #63*256+63,d5
  6886.  move.b (a0,d5.w*4),d0
  6887.  add.l d1,d0
  6888.  bcc.s .nomoreb
  6889.  add.w #256,d0
  6890. .nomoreb:
  6891.  add.w a4,d3
  6892.  move.w (a1,d0.w*2),(a3)
  6893.  addq #4,a3 
  6894.  addx.l d6,d5
  6895.  dbcs d7,acrossscrngour
  6896.  dbcc d7,backbeforegour
  6897.  bra.s past1gour
  6898.  
  6899. acrossscrngour:
  6900.  and.w #63*256+63,d5
  6901.  move.b (a0,d5.w*4),d0
  6902.  add.l d1,d0
  6903.  bcc.s .nomoreb
  6904.  add.w #256,d0
  6905. .nomoreb:
  6906.  add.w a4,d3
  6907.  move.w (a1,d0.w*2),(a3)
  6908.  addq #4,a3
  6909.  addx.l d2,d5
  6910.  dbcs d7,acrossscrngour
  6911.  dbcc d7,backbeforegour
  6912. past1gour:
  6913.  bcc.s gotoacrossgour
  6914.  
  6915.  move.w d4,d7
  6916.  bne.s .notdoneyet
  6917.  move.l d0,leftbright
  6918.  
  6919.  rts
  6920. .notdoneyet:
  6921.  
  6922.  cmp.w #32,d7
  6923.  ble.s .notoowide
  6924.  move.w #32,d7
  6925. .notoowide
  6926.  sub.w d7,d4  
  6927.  addq #4,a3
  6928.  
  6929.  dbra d7,backbeforegour
  6930.  rts
  6931.  
  6932.  
  6933. gotoacrossgour:
  6934.  
  6935.  move.w d4,d7
  6936.  bne.s .notdoneyet
  6937.  rts
  6938. .notdoneyet:
  6939.  
  6940.  cmp.w #32,d7
  6941.  ble.s .notoowide
  6942.  move.w #32,d7
  6943. .notoowide
  6944.  sub.w d7,d4  
  6945.  addq #4,a3
  6946.  
  6947.  dbra d7,acrossscrngour
  6948.  rts
  6949.  
  6950.  
  6951. waterpt: dc.l waterlist
  6952.  
  6953. waterlist:
  6954.  dc.l waterfile
  6955.  dc.l waterfile+2
  6956.  dc.l waterfile+256
  6957.  dc.l waterfile+256+2
  6958.  dc.l waterfile+512
  6959.  dc.l waterfile+512+2
  6960.  dc.l waterfile+768
  6961.  dc.l waterfile+768+2
  6962. ; dc.l waterfile+768
  6963. ; dc.l waterfile+512+2
  6964. ; dc.l waterfile+512
  6965. ; dc.l waterfile+256+2
  6966. ; dc.l waterfile+256
  6967. ; dc.l waterfile+2
  6968. endwaterlist:
  6969.  
  6970. watertouse: dc.l waterfile
  6971.  
  6972. wtan: dc.w 0
  6973. wateroff: dc.w 0
  6974.  
  6975. texturedwater:
  6976.  
  6977.  add.w wateroff,d5
  6978.  
  6979.  move.l #brightentab,a1
  6980.  move.w dst,d0
  6981.  clr.b d0
  6982.  
  6983.  add.w d0,d0
  6984.  cmp.w #12*512,d0
  6985.  blt.s .notoowater
  6986.  move.w #12*512,d0
  6987.  
  6988.  
  6989. .notoowater:
  6990.   
  6991.  adda.w d0,a1
  6992.  
  6993.  move.w dst,d0
  6994.  asl.w #7,d0
  6995.  add.w wtan,d0
  6996.  and.w #8191,d0
  6997.  move.l #SineTable,a0
  6998.  move.w (a0,d0.w),d0
  6999.  ext.l d0
  7000.  
  7001.  move.w dst,d3
  7002.  add.w #300,d3
  7003.  divs d3,d0
  7004.  asr.w #6,d0
  7005.  addq #2,d0
  7006.  cmp.w disttobot,d0
  7007.  blt.s oknotoffbototot
  7008.  
  7009.  move.w disttobot,d0
  7010.  subq #1,d0
  7011.  
  7012. oknotoffbototot
  7013.  
  7014. ; move.w dst,d3
  7015. ; asr.w #7,d3
  7016. ; add.w d3,d0
  7017.  
  7018.  muls #104*4,d0
  7019.  tst.w above
  7020.  beq.s nonnnnneg
  7021.  neg.l d0
  7022.  
  7023. nonnnnneg:
  7024.  
  7025.  move.l d0,a6
  7026.  
  7027.  move.l watertouse,a0
  7028.  
  7029.  move.w startsmoothx,d3
  7030.  dbra d7,acrossscrnw
  7031.  rts
  7032.  
  7033. backbeforew:
  7034.  and.w d1,d5
  7035.  move.w (a0,d5.w*4),d0
  7036.  move.b 1(a3,a6.w),d0
  7037.  move.w (a1,d0.w*2),(a3)
  7038.  addq #4,a3
  7039.  add.w a4,d3
  7040.  addx.l d6,d5
  7041.  dbcs d7,acrossscrnw
  7042.  dbcc d7,backbeforew
  7043.  bcc.s past1w
  7044.  add.w #256,d5 
  7045.  bra.s past1w
  7046.  
  7047. acrossscrnw:
  7048.  and.w d1,d5
  7049.  move.w (a0,d5.w*4),d0
  7050.  move.b 1(a3,a6.w),d0
  7051.  move.w (a1,d0.w*2),(a3)
  7052.  addq #4,a3
  7053.  add.w a4,d3
  7054.  addx.l d2,d5
  7055.  dbcs d7,acrossscrnw
  7056.  dbcc d7,backbeforew
  7057.  bcc.s past1w
  7058.  add.w #256,d5 
  7059. past1w:
  7060.  
  7061.  move.w d4,d7
  7062.  bne.s .notdoneyet
  7063.  rts
  7064. .notdoneyet:
  7065.  
  7066.  cmp.w #32,d7
  7067.  ble.s .notoowide
  7068.  move.w #32,d7
  7069. .notoowide
  7070.  sub.w d7,d4  
  7071.  addq #4,a3
  7072.  
  7073.  dbra d7,acrossscrnw
  7074.  rts
  7075.  
  7076. usewater: dc.w 0
  7077.  dc.w 0
  7078. startsmoothx: dc.w 0
  7079.  dc.w 0
  7080. startsmoothz: dc.w 0
  7081.  
  7082. ********************************
  7083. *
  7084.  include "AB3:source/ObjDraw3.chipram"
  7085. *
  7086. ********************************
  7087.  
  7088. numframes:
  7089.  dc.w 0
  7090.  
  7091. alframe: dc.l 0
  7092.  
  7093. alan:
  7094.  dcb.l 8,0
  7095.  dcb.l 8,1
  7096.  dcb.l 8,2
  7097.  dcb.l 8,3
  7098. endalan:
  7099.  
  7100. alanptr: dc.l alan
  7101.  
  7102. Time2: dc.l 0
  7103. dispco:
  7104.  dc.w 0
  7105.  
  7106.  
  7107. key_interrupt:
  7108.         movem.l    d0-d7/a0-a6,-(sp)
  7109.  
  7110. ;        move.w    INTREQR,d0
  7111. ;        btst    #3,d0
  7112. ;        beq    .not_key
  7113.  
  7114.         move.b    $bfdd00,d0
  7115.         btst    #0,d0
  7116.         bne    .key_cont
  7117. ;        move.b    $bfed01,d0
  7118. ;        btst    #0,d0
  7119. ;        bne    .key_cont
  7120.     
  7121. ;        btst    #3,d0
  7122. ;        beq    .key_cont
  7123.  
  7124.         move.b    $bfec01,d0
  7125.         clr.b    $bfec01
  7126.  
  7127.         tst.b    d0
  7128.         beq    .key_cont
  7129.  
  7130. ;        bset    #6,$bfee01
  7131. ;        move.b    #$f0,$bfe401
  7132. ;        move.b    #$00,$bfe501
  7133. ;        bset    #0,$bfee01
  7134.  
  7135.  
  7136.         not.b    d0
  7137.         ror.b    #1,d0
  7138.         lea.l    KeyMap,a0
  7139.         tst.b    d0
  7140.         bmi.b    .key_up
  7141.         and.w    #$7f,d0
  7142. ;        add.w    #1,d0
  7143.         move.b    #$ff,(a0,d0.w)
  7144.         move.b    d0,lastpressed
  7145.  
  7146.         bra.b    .key_cont2
  7147. .key_up:
  7148.         and.w    #$7f,d0
  7149. ;        add.w    #1,d0
  7150.         move.b    #$00,(a0,d0.w)
  7151.  
  7152. .key_cont2
  7153. ;        btst    #0,$bfed01
  7154. ;        beq    .key_cont2
  7155. ;        move.b    #%00000000,$bfee01
  7156. ;        move.b    #%10001000,$bfed01
  7157.  
  7158. ;alt keys should not be independent so overlay ralt on lalt
  7159.  
  7160.         
  7161. .key_cont
  7162.  
  7163. ;        move.w    #$0008,INTREQ
  7164. .not_key:    ;lea.l    $dff000,a5
  7165.  
  7166. ;        lea.l    _keypressed(pc),a0
  7167. ;        move.b    101(a0),d0    ;read LALT
  7168. ;        or.b    102(a0),d0    ;blend it with RALT
  7169. ;        move.b    d0,127(a0)    ;save in combined position
  7170.  
  7171.         movem.l    (sp)+,d0-d7/a0-a6
  7172.  
  7173.         rts
  7174.  
  7175. lastpressed:    dc.b 0
  7176. KInt_CCode    Ds.b    1
  7177. KInt_Askey    Ds.b    1
  7178. KInt_OCode    Ds.w    1
  7179.  
  7180.  
  7181. OldSpace: dc.b 0
  7182. SpaceTapped: dc.b 0
  7183. PLR1_SPCTAP: dc.b 0
  7184. PLR2_SPCTAP: dc.b 0
  7185. PLR1_Ducked: dc.b 0
  7186. PLR2_Ducked: dc.b 0
  7187.  even
  7188.  
  7189.  include "ab3:source/PLR1CONTROL.s"
  7190.  include "ab3:source/PLR2CONTROL.s"
  7191.  include "ab3:source/FALL.s"
  7192.  
  7193. prot7: dc.w 0
  7194.  
  7195. GOTTOSEND: dc.w 0
  7196.  
  7197. OtherInter:
  7198.  move.w #$0010,$dff000+intreq
  7199.  movem.l d0-d7/a0-a6,-(a7)
  7200.  bra.s justshake
  7201.  
  7202.     cnop 0,4
  7203.  
  7204. Chan0inter:
  7205.  
  7206.     SAVEREGS
  7207.     jsr    .routine
  7208.     GETREGS
  7209.     moveq    #0,d0
  7210.     rts
  7211.  
  7212. .routine
  7213.  
  7214.     FILTER
  7215.     
  7216. ;w move.w #$0010,$dff000+intreq
  7217.  
  7218.  tst.b doanything
  7219.  bne.s dosomething
  7220.  
  7221.  moveq #0,d0
  7222.  rts
  7223.  
  7224. dosomething:
  7225.  
  7226.  
  7227.  addq.w #1,FramesToDraw
  7228.  movem.l d0-d7/a0-a6,-(a7)
  7229.  
  7230. ; jsr INITREC
  7231. ; jsr RECEIVE
  7232.  
  7233. ; tst.l BUFFER
  7234. ; beq.s justshake
  7235. ; st GOTTOSEND
  7236. ; move.l #OtherInter,$6c
  7237.  
  7238. justshake:
  7239.  
  7240.  cmp.b #'b',Prefsfile+3
  7241.  bne.s .noback
  7242.  jsr mt_music
  7243. .noback:
  7244.  
  7245.  bra dontshowtime
  7246.  
  7247.  tst.b oktodisplay
  7248.  beq dontshowtime
  7249.  clr.b oktodisplay
  7250.  subq.w #1,dispco
  7251.  bgt dontshowtime
  7252.  move.w #10,dispco
  7253.  
  7254.  move.l #TimerScr+10,a0
  7255.  move.l TimeCount,d0
  7256.  bge.s timenotneg
  7257.  move.l #1111*256,d0
  7258. timenotneg:
  7259.  asr.l #8,d0
  7260.  move.l #digits,a1
  7261.  move.w #7,d2
  7262. digitlop
  7263.  divs #10,d0
  7264.  swap d0
  7265.  lea (a1,d0.w*8),a2
  7266.  move.b (a2)+,(a0)
  7267.  move.b (a2)+,24(a0)
  7268.  move.b (a2)+,24*2(a0)
  7269.  move.b (a2)+,24*3(a0)
  7270.  move.b (a2)+,24*4(a0)
  7271.  move.b (a2)+,24*5(a0)
  7272.  move.b (a2)+,24*6(a0)
  7273.  move.b (a2)+,24*7(a0)
  7274.  subq #1,a0
  7275.  swap d0
  7276.  ext.l d0
  7277.  dbra d2,digitlop
  7278.  
  7279.  move.l #TimerScr+10+24*10,a0
  7280.  move.l NumTimes,d0
  7281.  move.l #digits,a1
  7282.  move.w #3,d2
  7283. digitlop2
  7284.  divs #10,d0
  7285.  swap d0
  7286.  lea (a1,d0.w*8),a2
  7287.  move.b (a2)+,(a0)
  7288.  move.b (a2)+,24(a0)
  7289.  move.b (a2)+,24*2(a0)
  7290.  move.b (a2)+,24*3(a0)
  7291.  move.b (a2)+,24*4(a0)
  7292.  move.b (a2)+,24*5(a0)
  7293.  move.b (a2)+,24*6(a0)
  7294.  move.b (a2)+,24*7(a0)
  7295.  subq #1,a0
  7296.  swap d0
  7297.  ext.l d0
  7298.  dbra d2,digitlop2
  7299.  
  7300.  move.l #TimerScr+10+24*20,a0
  7301.  moveq #0,d0
  7302.  move.w FramesToDraw,d0
  7303.  move.l #digits,a1
  7304.  move.w #2,d2
  7305. digitlop3
  7306.  divs #10,d0
  7307.  swap d0
  7308.  lea (a1,d0.w*8),a2
  7309.  move.b (a2)+,(a0)
  7310.  move.b (a2)+,24(a0)
  7311.  move.b (a2)+,24*2(a0)
  7312.  move.b (a2)+,24*3(a0)
  7313.  move.b (a2)+,24*4(a0)
  7314.  move.b (a2)+,24*5(a0)
  7315.  move.b (a2)+,24*6(a0)
  7316.  move.b (a2)+,24*7(a0)
  7317.  subq #1,a0
  7318.  swap d0
  7319.  ext.l d0
  7320.  dbra d2,digitlop3
  7321.  
  7322. dontshowtime:
  7323.  
  7324.  
  7325.  move.l alanptr,a0
  7326.  move.l (a0)+,alframe
  7327.  cmp.l #endalan,a0
  7328.  blt.s nostartalan
  7329.  move.l #alan,a0
  7330. nostartalan:
  7331.  move.l a0,alanptr
  7332.  
  7333.  
  7334.  tst.b READCONTROLS
  7335.  beq.s nocontrols
  7336.  
  7337.  cmp.b #'s',mors
  7338.  beq.s control2
  7339.  
  7340.  tst.b PLR1MOUSE
  7341.  beq.s PLR1_nomouse
  7342.  bsr PLR1_mouse_control
  7343. PLR1_nomouse:
  7344.  tst.b PLR1KEYS
  7345.  beq.s PLR1_nokeys
  7346.  bsr PLR1_keyboard_control
  7347. PLR1_nokeys:
  7348. ; tst.b PLR1PATH
  7349. ; beq.s PLR1_nopath
  7350. ; bsr PLR1_follow_path
  7351. ;PLR1_nopath:
  7352.  tst.b PLR1JOY
  7353.  beq.s PLR1_nojoy
  7354.  bsr PLR1_JoyStick_control
  7355. PLR1_nojoy: 
  7356.  bra.s nocontrols
  7357.  
  7358. control2:
  7359.  tst.b PLR2MOUSE
  7360.  beq.s PLR2_nomouse
  7361.  bsr PLR2_mouse_control
  7362. PLR2_nomouse:
  7363.  tst.b PLR2KEYS
  7364.  beq.s PLR2_nokeys
  7365.  bsr PLR2_keyboard_control
  7366. PLR2_nokeys:
  7367. ; tst.b PLR2PATH
  7368. ; beq.s PLR2_nopath
  7369. ; bsr PLR1_follow_path
  7370. ;PLR2_nopath:
  7371.  tst.b PLR2JOY
  7372.  beq.s PLR2_nojoy
  7373.  bsr PLR2_JoyStick_control
  7374. PLR2_nojoy: 
  7375.  
  7376.  
  7377. nocontrols:
  7378.  
  7379.  move.l #$dff000,a6
  7380.  
  7381.  cmp.b #'4',Prefsfile+1
  7382.  bne.s nomuckabout
  7383.  
  7384.  move.w #$0,d0 
  7385.  tst.b NoiseMade0LEFT
  7386.  beq.s noturnoff0
  7387.  move.w #1,d0
  7388. noturnoff0:
  7389.  tst.b NoiseMade0RIGHT
  7390.  beq.s noturnoff1
  7391.  or.w #2,d0
  7392. noturnoff1:
  7393.  tst.b NoiseMade1RIGHT
  7394.  beq.s noturnoff2
  7395.  or.w #4,d0
  7396. noturnoff2:
  7397.  tst.b NoiseMade1LEFT
  7398.  beq.s noturnoff3
  7399.  or.w #8,d0
  7400. noturnoff3:
  7401.     move.w d0,dmacon(a6)
  7402.  
  7403. nomuckabout:
  7404.  
  7405.  
  7406. ; tst.b PLR2_fire
  7407. ; beq.s firenotpressed2
  7408. ; fire was pressed last time.
  7409. ; btst #7,$bfe001
  7410. ; bne.s firenownotpressed2
  7411. ; fire is still pressed this time.
  7412. ; st PLR2_fire
  7413. ; bra dointer
  7414.  
  7415. firenownotpressed2:
  7416. ; fire has been released.
  7417. ; clr.b PLR2_fire
  7418. ; bra dointer
  7419.  
  7420. firenotpressed2
  7421.  
  7422. ; fire was not pressed last frame...
  7423.  
  7424. ; btst #7,$bfe001
  7425. ; if it has still not been pressed, go back above
  7426. ; bne.s firenownotpressed2
  7427. ; fire was not pressed last time, and was this time, so has
  7428. ; been clicked.
  7429. ; st PLR2_clicked
  7430. ; st PLR2_fire
  7431.  
  7432. dointer
  7433.  
  7434.  cmp.b #'4',Prefsfile+1
  7435.     beq fourchannel
  7436.  
  7437.  btst #1,$dff000+intreqr
  7438.     bne.s newsampbitl
  7439.  
  7440.  movem.l (a7)+,d0-d7/a0-a6
  7441.  
  7442.  moveq #0,d0
  7443.  rts
  7444.  
  7445.  
  7446. swappedem: dc.w 0
  7447.  
  7448. newsampbitl:
  7449.  
  7450.  move.w #$820f,$dff000+dmacon
  7451.  
  7452.  move.w #$200,$dff000+intreq
  7453.  
  7454. ; tst.b CHANNELDATA
  7455. ; bne nochannel0
  7456.  
  7457.  move.l pos0LEFT,a0
  7458.  move.l pos2LEFT,a1
  7459.  
  7460.  move.l #tab,a2
  7461.  
  7462.  moveq #0,d0
  7463.  moveq #0,d1
  7464.  move.b vol0left,d0
  7465.  move.b vol2left,d1
  7466.  cmp.b d1,d0
  7467.  slt swappedem
  7468.  bge.s fbig0
  7469.  
  7470. ; d1 is bigger so scale d0 and use d1
  7471. ; as audiochannel volume.
  7472.  
  7473.  exg a0,a1
  7474.  asl.w #6,d0
  7475.  divs d1,d0
  7476.  lsl.w #8,d0
  7477.  adda.w d0,a2
  7478.  move.w d1,$dff0a8
  7479.  bra.s donechan0
  7480.  
  7481. fbig0:
  7482.  tst.w d0
  7483.  beq.s donechan0
  7484.  asl.w #6,d1
  7485.  divs d0,d1
  7486.  lsl.w #8,d1
  7487.  adda.w d1,a2
  7488.  move.w d0,$dff0a8
  7489.  
  7490. donechan0:
  7491.  
  7492.  move.l Aupt0,a3
  7493.  move.l a3,$dff0a0
  7494.  move.l Auback0,Aupt0
  7495.  move.l a3,Auback0
  7496.  
  7497.  move.l Auback0,a3
  7498.  
  7499.  moveq #0,d0
  7500.  moveq #0,d1
  7501.  moveq #0,d2
  7502.  moveq #0,d3
  7503.  moveq #0,d4
  7504.  moveq #0,d5
  7505.  move.w #49,d7
  7506. loop:
  7507.  move.l (a0)+,d0
  7508.  move.b (a1)+,d1
  7509.  move.b (a1)+,d2
  7510.  move.b (a1)+,d3
  7511.  move.b (a1)+,d4
  7512.  move.b (a2,d3.w),d5
  7513.  swap d5
  7514.  move.b (a2,d1.w),d5
  7515.  asl.l #8,d5
  7516.  move.b (a2,d2.w),d5
  7517.  swap d5
  7518.  move.b (a2,d4.w),d5
  7519.  add.l d5,d0
  7520.  move.l d0,(a3)+
  7521.  dbra d7,loop
  7522.  
  7523.  tst.b swappedem
  7524.  beq.s .ok23
  7525.  exg a0,a1
  7526. .ok23:
  7527.  
  7528.  cmp.l Samp0endLEFT,a0
  7529.  blt.s .notoffendsamp1
  7530.  move.l SampleList+6*8,a0
  7531.  move.l SampleList+6*8+4,Samp0endLEFT
  7532.  move.b #63,vol0left
  7533.  st LEFTCHANDATA+1
  7534.  move.w #0,LEFTCHANDATA+2
  7535. .notoffendsamp1:
  7536.  
  7537.  cmp.l Samp2endLEFT,a1
  7538.  blt.s .notoffendsamp2
  7539.  move.l #empty,a1
  7540.  move.l #emptyend,Samp2endLEFT
  7541.  move.b #0,vol2left
  7542.  st LEFTCHANDATA+1+8
  7543.  move.w #0,LEFTCHANDATA+2+8
  7544. .notoffendsamp2:
  7545.  
  7546.  move.l a0,pos0LEFT
  7547.  move.l a1,pos2LEFT
  7548.  
  7549. nochannel0:
  7550.  
  7551.  tst.b CHANNELDATA+16
  7552.  bne nochannel1
  7553.  
  7554.  
  7555.  move.l pos0RIGHT,a0
  7556.  move.l pos2RIGHT,a1
  7557.  
  7558.  move.l Aupt1,a3
  7559.  move.l a3,$dff0b0
  7560.  move.l Auback1,Aupt1
  7561.  move.l a3,Auback1
  7562.  
  7563.  move.l #tab,a2
  7564.  
  7565.  moveq #0,d0
  7566.  moveq #0,d1
  7567.  move.b vol0right,d0
  7568.  move.b vol2right,d1
  7569.  cmp.b d1,d0
  7570.  slt swappedem
  7571.  bge.s fbig1
  7572.  
  7573. ; d1 is bigger so scale d0 and use d1
  7574. ; as audiochannel volume.
  7575.  
  7576.  exg a0,a1
  7577.  asl.w #6,d0
  7578.  divs d1,d0
  7579.  lsl.w #8,d0
  7580.  adda.w d0,a2
  7581.  move.w d1,$dff0b8
  7582.  bra.s donechan1
  7583.  
  7584. fbig1:
  7585.  tst.w d0
  7586.  beq.s donechan1
  7587.  asl.w #6,d1
  7588.  divs d0,d1
  7589.  lsl.w #8,d1
  7590.  adda.w d1,a2
  7591.  move.w d0,$dff0b8
  7592.  
  7593. donechan1:
  7594.  moveq #0,d0
  7595.  moveq #0,d1
  7596.  moveq #0,d2
  7597.  moveq #0,d3
  7598.  moveq #0,d4
  7599.  moveq #0,d5
  7600.  move.w #49,d7
  7601. loop2:
  7602.  move.l (a0)+,d0
  7603.  move.b (a1)+,d1
  7604.  move.b (a1)+,d2
  7605.  move.b (a1)+,d3
  7606.  move.b (a1)+,d4
  7607.  move.b (a2,d3.w),d5
  7608.  swap d5
  7609.  move.b (a2,d1.w),d5
  7610.  asl.l #8,d5
  7611.  move.b (a2,d2.w),d5
  7612.  swap d5
  7613.  move.b (a2,d4.w),d5
  7614.  add.l d5,d0
  7615.  move.l d0,(a3)+
  7616.  dbra d7,loop2
  7617.  
  7618.  tst.b swappedem
  7619.  beq.s ok01
  7620.  exg a0,a1
  7621. ok01:
  7622.  
  7623.  cmp.l Samp0endRIGHT,a0
  7624.  blt.s .notoffendsamp1
  7625.  move.l #empty,a0
  7626.  move.l #emptyend,Samp0endRIGHT
  7627.  move.b #0,vol0right
  7628.  st RIGHTCHANDATA+1
  7629.  move.w #0,RIGHTCHANDATA+2
  7630. .notoffendsamp1:
  7631.  
  7632.  cmp.l Samp2endRIGHT,a1
  7633.  blt.s .notoffendsamp2
  7634.  move.l #empty,a1
  7635.  move.l #emptyend,Samp2endRIGHT
  7636.  move.b #0,vol2right
  7637.  st RIGHTCHANDATA+1+8
  7638.  move.w #0,RIGHTCHANDATA+2+8
  7639. .notoffendsamp2:
  7640.  
  7641.  move.l a0,pos0RIGHT
  7642.  move.l a1,pos2RIGHT
  7643.  
  7644. nochannel1:
  7645.  
  7646. ******************* Other two channels
  7647.  
  7648.  move.l pos1LEFT,a0
  7649.  move.l pos3LEFT,a1
  7650.  
  7651.  move.l #tab,a2
  7652.  
  7653.  moveq #0,d0
  7654.  moveq #0,d1
  7655.  move.b vol1left,d0
  7656.  move.b vol3left,d1
  7657.  cmp.b d1,d0
  7658.  slt swappedem
  7659.  bge.s fbig2
  7660.  
  7661. ; d1 is bigger so scale d0 and use d1
  7662. ; as audiochannel volume.
  7663.  
  7664.  exg a0,a1
  7665.  asl.w #6,d0
  7666.  divs d1,d0
  7667.  lsl.w #8,d0
  7668.  adda.w d0,a2
  7669.  move.w d1,$dff0d8
  7670.  bra.s donechan2
  7671.  
  7672. fbig2:
  7673.  tst.w d0
  7674.  beq.s donechan2
  7675.  asl.w #6,d1
  7676.  divs d0,d1
  7677.  lsl.w #8,d1
  7678.  adda.w d1,a2
  7679.  move.w d0,$dff0d8
  7680.  
  7681. donechan2:
  7682.  
  7683.  move.l Aupt2,a3
  7684.  move.l a3,$dff0d0
  7685.  move.l Auback2,Aupt2
  7686.  move.l a3,Auback2
  7687.  
  7688.  moveq #0,d0
  7689.  moveq #0,d1
  7690.  moveq #0,d2
  7691.  moveq #0,d3
  7692.  moveq #0,d4
  7693.  moveq #0,d5
  7694.  move.w #49,d7
  7695. loop3:
  7696.  move.l (a0)+,d0
  7697.  move.b (a1)+,d1
  7698.  move.b (a1)+,d2
  7699.  move.b (a1)+,d3
  7700.  move.b (a1)+,d4
  7701.  move.b (a2,d3.w),d5
  7702.  swap d5
  7703.  move.b (a2,d1.w),d5
  7704.  asl.l #8,d5
  7705.  move.b (a2,d2.w),d5
  7706.  swap d5
  7707.  move.b (a2,d4.w),d5
  7708.  add.l d5,d0
  7709.  move.l d0,(a3)+
  7710.  dbra d7,loop3
  7711.  
  7712.  tst.b swappedem
  7713.  beq.s .ok23
  7714.  exg a0,a1
  7715. .ok23:
  7716.  
  7717.  cmp.l Samp1endLEFT,a0
  7718.  blt.s .notoffendsamp3
  7719.  move.l #empty,a0
  7720.  move.l #emptyend,Samp1endLEFT
  7721.  move.b #0,vol1left
  7722.  st LEFTCHANDATA+1+4
  7723.  move.w #0,LEFTCHANDATA+2+4
  7724. .notoffendsamp3:
  7725.  
  7726.  cmp.l Samp3endLEFT,a1
  7727.  blt.s .notoffendsamp4
  7728.  move.l #empty,a1
  7729.  move.l #emptyend,Samp3endLEFT
  7730.  move.b #0,vol3left
  7731.  st LEFTCHANDATA+1+12
  7732.  move.w #0,LEFTCHANDATA+2+12
  7733. .notoffendsamp4:
  7734.  
  7735.  move.l a0,pos1LEFT
  7736.  move.l a1,pos3LEFT
  7737.  
  7738.  move.l pos1RIGHT,a0
  7739.  move.l pos3RIGHT,a1
  7740.  
  7741.  move.l Aupt3,a3
  7742.  move.l a3,$dff0c0
  7743.  move.l Auback3,Aupt3
  7744.  move.l a3,Auback3
  7745.  
  7746.  move.l #tab,a2
  7747.  
  7748.  moveq #0,d0
  7749.  moveq #0,d1
  7750.  move.b vol1right,d0
  7751.  move.b vol3right,d1
  7752.  cmp.b d1,d0
  7753.  slt.s swappedem
  7754.  bge.s fbig3
  7755.  
  7756.  exg a0,a1
  7757.  asl.w #6,d0
  7758.  divs d1,d0
  7759.  lsl.w #8,d0
  7760.  adda.w d0,a2
  7761.  move.w d1,$dff0c8
  7762.  bra.s donechan3
  7763.  
  7764. fbig3:
  7765.  tst.w d0
  7766.  beq.s donechan3
  7767.  asl.w #6,d1
  7768.  divs d0,d1
  7769.  lsl.w #8,d1
  7770.  adda.w d1,a2
  7771.  move.w d0,$dff0c8
  7772. donechan3:
  7773.  
  7774.  moveq #0,d0
  7775.  moveq #0,d1
  7776.  moveq #0,d2
  7777.  moveq #0,d3
  7778.  moveq #0,d4
  7779.  moveq #0,d5
  7780.  move.w #49,d7
  7781. loop4:
  7782.  move.l (a0)+,d0
  7783.  move.b (a1)+,d1
  7784.  move.b (a1)+,d2
  7785.  move.b (a1)+,d3
  7786.  move.b (a1)+,d4
  7787.  move.b (a2,d3.w),d5
  7788.  swap d5
  7789.  move.b (a2,d1.w),d5
  7790.  asl.l #8,d5
  7791.  move.b (a2,d2.w),d5
  7792.  swap d5
  7793.  move.b (a2,d4.w),d5
  7794.  add.l d5,d0
  7795.  move.l d0,(a3)+
  7796.  dbra d7,loop4
  7797.  
  7798.  tst.b swappedem
  7799.  beq.s .ok23
  7800.  exg a0,a1
  7801. .ok23:
  7802.  
  7803.  cmp.l Samp1endRIGHT,a0
  7804.  blt.s notoffendsamp3
  7805.  move.l #empty,a0
  7806.  move.l #emptyend,Samp1endRIGHT
  7807.  move.b #0,vol1right
  7808.  st RIGHTCHANDATA+1+4
  7809.  move.w #0,RIGHTCHANDATA+2+4
  7810. notoffendsamp3:
  7811.  
  7812.  cmp.l Samp3endRIGHT,a1
  7813.  blt.s notoffendsamp4
  7814.  move.l #empty,a1
  7815.  move.l #emptyend,Samp3endRIGHT
  7816.  move.b #0,vol3right
  7817.  st RIGHTCHANDATA+1+12
  7818.  move.w #0,RIGHTCHANDATA+2+12
  7819. notoffendsamp4:
  7820.  
  7821.  move.l a0,pos1RIGHT
  7822.  move.l a1,pos3RIGHT
  7823.  
  7824.  movem.l (a7)+,d0-d7/a0-a6
  7825.  tst.b counting
  7826.  beq .nostartcounter
  7827.  JSR STARTCOUNT
  7828. .nostartcounter:
  7829.  
  7830.  moveq #0,d0
  7831.  rts
  7832.  
  7833. ***********************************
  7834. * 4 channel sound routine
  7835. ***********************************
  7836.  
  7837. fourchannel:
  7838.  
  7839.  move.l #$dff000,a6
  7840.  
  7841.  btst #7,intreqrl(a6)
  7842.  beq.s nofinish0
  7843. ; move.w #0,LEFTCHANDATA+2
  7844. ; st LEFTCHANDATA+1
  7845.  move.l #null,$a0(a6)
  7846.  move.w #100,$a4(a6) 
  7847.  move.w #$0080,intreq(a6)
  7848. nofinish0:
  7849.  
  7850.  tst.b NoiseMade0pLEFT
  7851.  beq.s NoChan0sound
  7852.  
  7853.  move.l Samp0endLEFT,d0
  7854.  move.l pos0LEFT,d1
  7855.  sub.l d1,d0
  7856.  lsr.l #1,d0
  7857.  move.w d0,$a4(a6)
  7858.  move.l d1,$a0(a6)
  7859.  move.w #$8201,dmacon(a6)
  7860.  moveq #0,d0
  7861.  move.b vol0left,d0
  7862.  move.w d0,$a8(a6)
  7863.  
  7864. NoChan0sound:
  7865.  
  7866. *****************************************
  7867. *****************************************
  7868.  
  7869.  btst #0,intreqr(a6)
  7870.  beq.s nofinish1
  7871.  move.l #null,$b0(a6)
  7872.  move.w #100,$b4(a6)
  7873.  move.w #$0100,intreq(a6)
  7874. nofinish1:
  7875.  
  7876.  tst.b NoiseMade0pRIGHT
  7877.  beq.s NoChan1sound
  7878.  
  7879.  move.l Samp0endRIGHT,d0
  7880.  move.l pos0RIGHT,d1
  7881.  sub.l d1,d0
  7882.  lsr.l #1,d0
  7883.  move.w d0,$b4(a6)
  7884.  move.l d1,$b0(a6)
  7885.  move.w d0,playnull1
  7886.  move.w #$8202,dmacon(a6)
  7887.  moveq #0,d0
  7888.  move.b vol0right,d0
  7889.  move.w d0,$b8(a6)
  7890.  
  7891. NoChan1sound:
  7892.  
  7893. *****************************************
  7894. *****************************************
  7895.  
  7896.  btst #1,intreqr(a6)
  7897.  beq.s nofinish2
  7898.  move.l #null,$c0(a6)
  7899.  move.w #100,$c4(a6)
  7900.  move.w #$0200,intreq(a6)
  7901. nofinish2:
  7902.  
  7903.  tst.b NoiseMade1pRIGHT
  7904.  beq.s NoChan2sound
  7905.  
  7906.  move.l Samp1endRIGHT,d0
  7907.  move.l pos1RIGHT,d1
  7908.  sub.l d1,d0
  7909.  lsr.l #1,d0
  7910.  move.w d0,$c4(a6)
  7911.  move.w d0,playnull2
  7912.  
  7913.  move.l d1,$c0(a6)
  7914.  move.w #$8204,dmacon(a6)
  7915.  moveq #0,d0
  7916.  move.b vol1right,d0
  7917.  move.w d0,$c8(a6)
  7918.  
  7919. NoChan2sound:
  7920.  
  7921. *****************************************
  7922. *****************************************
  7923.  
  7924.  btst #2,intreqr(a6)
  7925.  beq.s nofinish3
  7926.  move.l #null,$d0(a6)
  7927.  move.w #100,$d4(a6)
  7928.  move.w #$0400,intreq(a6)
  7929. nofinish3:
  7930.  
  7931.  tst.b NoiseMade1pLEFT
  7932.  beq.s NoChan3sound
  7933.  
  7934.  move.l Samp1endLEFT,d0
  7935.  move.l pos1LEFT,d1
  7936.  sub.l d1,d0
  7937.  lsr.l #1,d0
  7938.  move.w d0,$d4(a6)
  7939.  move.w d0,playnull3
  7940.  move.l d1,$d0(a6)
  7941.  move.w #$8208,dmacon(a6)
  7942.  moveq #0,d0
  7943.  move.b vol1left,d0
  7944.  move.w d0,$d8(a6)
  7945.  
  7946. NoChan3sound:
  7947.  
  7948. nomorechannels:
  7949.  
  7950.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  7951.  move.l #0,NoiseMade0LEFT
  7952.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  7953.  move.l #0,NoiseMade0RIGHT
  7954.  
  7955. ; tst.b playnull0
  7956. ; beq.s .nnul
  7957. ; sub.b #1,playnull0
  7958. ; bra.s chan0still
  7959. ;.nnul:
  7960. ;chan0still:
  7961.  
  7962.  tst.b NoiseMade0pLEFT
  7963.  bne.s chan0still
  7964.  tst.w playnull0
  7965.  beq.s nnul0
  7966.  sub.w #100,playnull0
  7967.  bra.s chan0still
  7968. nnul0:
  7969.  move.w #0,LEFTCHANDATA+2
  7970.  st LEFTCHANDATA+1
  7971. chan0still:
  7972.  
  7973.  tst.b NoiseMade0pRIGHT
  7974.  bne.s chan1still
  7975.  tst.w playnull1
  7976.  beq.s nnul1
  7977.  sub.w #100,playnull1
  7978.  bra.s chan1still
  7979. nnul1:
  7980.  move.w #0,RIGHTCHANDATA+2
  7981.  st RIGHTCHANDATA+1
  7982. chan1still:
  7983.  
  7984.  tst.b NoiseMade1pRIGHT
  7985.  bne.s chan2still
  7986.  tst.w playnull2
  7987.  beq.s nnul2
  7988.  sub.w #100,playnull2
  7989.  bra.s chan2still
  7990. nnul2:
  7991.  move.w #0,RIGHTCHANDATA+2+4
  7992.  st RIGHTCHANDATA+1+4
  7993. chan2still:
  7994.  
  7995.  tst.b NoiseMade1pLEFT
  7996.  bne.s chan3still
  7997.  tst.w playnull3
  7998.  beq.s nnul3
  7999.  sub.w #100,playnull3
  8000.  bra.s chan3still
  8001. nnul3:
  8002.  move.w #0,LEFTCHANDATA+2+4
  8003.  st LEFTCHANDATA+1+4
  8004.  
  8005. chan3still:
  8006.  
  8007.  
  8008.  movem.l (a7)+,d0-d7/a0-a6
  8009.  
  8010.  moveq #0,d0
  8011.  rts
  8012.  
  8013. backbeat: dc.w 0
  8014.  
  8015. playnull0: dc.w 0
  8016. playnull1: dc.w 0
  8017. playnull2: dc.w 0
  8018. playnull3: dc.w 0
  8019.  
  8020. Samp0endRIGHT: dc.l emptyend
  8021. Samp1endRIGHT: dc.l emptyend
  8022. Samp2endRIGHT: dc.l emptyend
  8023. Samp3endRIGHT: dc.l emptyend
  8024. Samp0endLEFT: dc.l emptyend
  8025. Samp1endLEFT: dc.l emptyend
  8026. Samp2endLEFT: dc.l emptyend
  8027. Samp3endLEFT: dc.l emptyend
  8028.  
  8029. Aupt0: dc.l null
  8030. Auback0: dc.l null+500
  8031. Aupt2: dc.l null3
  8032. Auback2: dc.l null3+500
  8033. Aupt3: dc.l null4
  8034. Auback3: dc.l null4+500
  8035. Aupt1: dc.l null2
  8036. Auback1: dc.l null2+500
  8037.  
  8038. NoiseMade0LEFT: dc.b 0
  8039. NoiseMade1LEFT: dc.b 0
  8040. NoiseMade2LEFT: dc.b 0
  8041. NoiseMade3LEFT: dc.b 0
  8042. NoiseMade0pLEFT: dc.b 0
  8043. NoiseMade1pLEFT: dc.b 0
  8044. NoiseMade2pLEFT: dc.b 0
  8045. NoiseMade3pLEFT: dc.b 0
  8046. NoiseMade0RIGHT: dc.b 0
  8047. NoiseMade1RIGHT: dc.b 0
  8048. NoiseMade2RIGHT: dc.b 0
  8049. NoiseMade3RIGHT: dc.b 0
  8050. NoiseMade0pRIGHT: dc.b 0
  8051. NoiseMade1pRIGHT: dc.b 0
  8052. NoiseMade2pRIGHT: dc.b 0
  8053. NoiseMade3pRIGHT: dc.b 0
  8054.  
  8055. empty: ds.l 100
  8056. emptyend:
  8057.  
  8058. **************************************
  8059. * I want a routine to calculate all the
  8060. * info needed for the sound player to
  8061. * work, given say position of noise, volume
  8062. * and sample number.
  8063.  
  8064. Samplenum: dc.w 0
  8065. Noisex: dc.w 0
  8066. Noisez: dc.w 0
  8067. Noisevol: dc.w 0
  8068. chanpick: dc.w 0
  8069. IDNUM: dc.w 0
  8070. needleft: dc.b 0
  8071. needright: dc.b 0
  8072. STEREO: dc.b $0
  8073. even
  8074. prot6: dc.w 0
  8075.  
  8076.  even
  8077.  
  8078. CHANNELDATA:
  8079. LEFTCHANDATA:
  8080.  dc.l $00000000
  8081.  dc.l $00000000
  8082.  dc.l $FF000000
  8083.  dc.l $FF000000
  8084. RIGHTCHANDATA:
  8085.  dc.l $00000000
  8086.  dc.l $00000000
  8087.  dc.l $FF000000
  8088.  dc.l $FF000000
  8089.  
  8090. RIGHTPLAYEDTAB: ds.l 20
  8091. LEFTPLAYEDTAB: ds.l 20
  8092.  
  8093. MakeSomeNoise:
  8094.  
  8095. ; Plan for new sound handler:
  8096. ; It is sent a sample number,
  8097. ; a position relative to the
  8098. ; player, an id number and a volume.
  8099. ; Also notifplaying.
  8100.  
  8101. ; indirect inputs are the available
  8102. ; channel flags and whether or not
  8103. ; stereo sound is selected.
  8104.  
  8105. ; the algorithm must decide
  8106. ; whether the new sound is more
  8107. ; important than the ones already
  8108. ; playing. Thus an 'importance'
  8109. ; must be calculated, probably
  8110. ; using volume.
  8111.  
  8112. ; The output needs to be:
  8113.  
  8114. ; Write the pointers and volumes of
  8115. ; the sound channels
  8116.  
  8117.  
  8118.  tst.b notifplaying
  8119.  beq.s dontworry
  8120.  
  8121. ; find if we are already playing
  8122.  
  8123.  move.b IDNUM,d0
  8124.  move.w #7,d1
  8125.  lea CHANNELDATA,a3
  8126. findsameasme
  8127.  tst.b (a3)
  8128.  bne.s notavail
  8129.  cmp.b 1(a3),d0
  8130.  beq SameAsMe
  8131. notavail:
  8132.  add.w #4,a3
  8133.  dbra d1,findsameasme
  8134.  bra dontworry
  8135. SameAsMe
  8136.  rts
  8137.  
  8138. noiseloud: dc.w 0
  8139.  
  8140. dontworry:
  8141.  
  8142. ; Ok its fine for us to play a sound.
  8143. ; So calculate left/right volume.
  8144.  
  8145.  move.w Noisex,d1
  8146.  muls d1,d1
  8147.  move.w Noisez,d2
  8148.  muls d2,d2
  8149.  move.w #64,d3
  8150.  move.w #32767,noiseloud
  8151.  moveq #1,d0
  8152.  add.l d1,d2
  8153.  beq pastcalc
  8154.  
  8155.  move.w #31,d0
  8156. .findhigh
  8157.  btst d0,d2
  8158.  bne .foundhigh
  8159.  dbra d0,.findhigh
  8160. .foundhigh
  8161.  asr.w #1,d0
  8162.  clr.l d3
  8163.  bset d0,d3
  8164.  move.l d3,d0
  8165.  
  8166.  move.w d0,d3
  8167.  muls d3,d3    ; x*x
  8168.  sub.l d2,d3    ; x*x-a
  8169.  asr.l #1,d3    ; (x*x-a)/2
  8170.  divs d0,d3    ; (x*x-a)/2x
  8171.  sub.w d3,d0    ; second approx
  8172.  bgt .stillnot0
  8173.  move.w #1,d0
  8174. .stillnot0
  8175.  
  8176.  move.w d0,d3
  8177.  muls d3,d3
  8178.  sub.l d2,d3
  8179.  asr.l #1,d3
  8180.  divs d0,d3
  8181.  sub.w d3,d0    ; second approx
  8182.  bgt .stillnot02
  8183.  move.w #1,d0
  8184. .stillnot02
  8185.  
  8186.  move.w Noisevol,d3
  8187.  ext.l d3
  8188.  asl.l #6,d3
  8189.  cmp.l #32767,d3
  8190.  ble.s .nnnn
  8191.  move.l #32767,d3
  8192. .nnnn
  8193.  
  8194.  asr.w #2,d0
  8195.  addq #1,d0
  8196.  divs d0,d3
  8197.  
  8198.  move.w d3,noiseloud
  8199.  
  8200.  cmp.w #64,d3
  8201.  ble.s notooloud
  8202.  move.w #64,d3
  8203. notooloud:
  8204.  
  8205. pastcalc:
  8206.  
  8207.     ; d3 contains volume of noise.
  8208.     
  8209.  move.w d3,d4
  8210.  
  8211.  move.w d3,d2
  8212.  muls Noisex,d2
  8213.  asl.w #3,d0
  8214.  divs d0,d2
  8215.  
  8216.  bgt.s quietleft
  8217.  add.w d2,d4
  8218.  bge.s donequiet
  8219.  move.w #0,d4
  8220.  bra.s donequiet
  8221. quietleft:
  8222.  sub.w d2,d3
  8223.  bge.s donequiet
  8224.  move.w #0,d3
  8225. donequiet:
  8226.  
  8227. ; d3=leftvol?
  8228. ; d4=rightvol?
  8229.  
  8230.  clr.w needleft
  8231.  
  8232.  cmp.b d3,d4
  8233.  bgt.s RightLouder
  8234.  
  8235. ; Left is louder; is it MUCH louder?
  8236.  
  8237.  st needleft
  8238.  move.w d3,d2
  8239.  sub.w d4,d2
  8240.  cmp.w #32,d2
  8241.  slt needright
  8242.  bra aboutsame
  8243.  
  8244. RightLouder:
  8245.  st needright
  8246.  move.w d4,d2
  8247.  sub.w d3,d2
  8248.  cmp.w #32,d2
  8249.  slt needleft
  8250.  
  8251. aboutsame:
  8252.  
  8253.  tst.b STEREO
  8254.  beq NOSTEREO
  8255.  
  8256. ; Find least important sound on left
  8257.  
  8258.  move.l #0,a2
  8259.  move.l #0,d5
  8260.  move.w #32767,d2
  8261.  move.b IDNUM,d0
  8262.  lea LEFTCHANDATA,a3
  8263.  move.w #3,d1
  8264. FindLeftChannel
  8265.  tst.b (a3)
  8266.  bne.s .notactive
  8267.  cmp.b 1(a3),d0
  8268.  beq.s FOUNDLEFT
  8269.  cmp.w 2(a3),d2
  8270.  blt.s .notactive
  8271.  move.w 2(a3),d2
  8272.  move.l a3,a2
  8273.  move.w d5,d6
  8274.  
  8275. .notactive:
  8276.  add.w #4,a3
  8277.  add.w #1,d5
  8278.  dbra d1,FindLeftChannel
  8279.  move.l a2,a3
  8280.  bra.s gopastleft
  8281. FOUNDLEFT:
  8282.  move.w d5,d6
  8283. gopastleft:
  8284.  tst.l a3
  8285.  bne.s FOUNDALEFT
  8286.  rts
  8287. FOUNDALEFT:
  8288.  
  8289. ; d6 = channel number
  8290.  move.b d0,1(a3)
  8291.  move.w d3,2(a3)
  8292.  
  8293.  move.w Samplenum,d5
  8294.  move.l #SampleList,a3
  8295.  move.l (a3,d5.w*8),a1
  8296.  move.l 4(a3,d5.w*8),a2
  8297.  
  8298.  tst.b d6
  8299.  seq NoiseMade0LEFT
  8300.  beq.s .chan0
  8301.  cmp.b #2,d6
  8302.  slt NoiseMade1LEFT
  8303.  blt .chan1
  8304.  seq NoiseMade2LEFT
  8305.  beq .chan2
  8306.  st NoiseMade3LEFT
  8307.  
  8308.  move.b d5,LEFTPLAYEDTAB+9
  8309.  move.b d3,LEFTPLAYEDTAB+1+9
  8310.  move.b d4,LEFTPLAYEDTAB+2+9
  8311.  move.b d3,vol3left
  8312.  move.l a1,pos3LEFT
  8313.  move.l a2,Samp3endLEFT
  8314.  bra dorightchan
  8315.  
  8316. .chan0: 
  8317.  move.b d5,LEFTPLAYEDTAB
  8318.  move.b d3,LEFTPLAYEDTAB+1
  8319.  move.b d4,LEFTPLAYEDTAB+2
  8320.  move.l a1,pos0LEFT
  8321.  move.l a2,Samp0endLEFT
  8322.  move.b d3,vol0left
  8323.  bra dorightchan
  8324.  
  8325. .chan1:
  8326.  move.b d5,LEFTPLAYEDTAB+3
  8327.  move.b d3,LEFTPLAYEDTAB+1+3
  8328.  move.b d4,LEFTPLAYEDTAB+2+3
  8329.  move.b d3,vol1left
  8330.  move.l a1,pos1LEFT
  8331.  move.l a2,Samp1endLEFT
  8332.  bra dorightchan
  8333.  
  8334. .chan2: 
  8335.  move.b d5,LEFTPLAYEDTAB+6
  8336.  move.b d3,LEFTPLAYEDTAB+1+6
  8337.  move.b d4,LEFTPLAYEDTAB+2+6
  8338.  move.l a1,pos2LEFT
  8339.  move.l a2,Samp2endLEFT
  8340.  move.b d3,vol2left
  8341.  
  8342. dorightchan:
  8343.  
  8344. ; Find least important sound on right
  8345.  
  8346.  move.l #0,a2
  8347.  move.l #0,d5
  8348.  move.w #10000,d2
  8349.  move.b IDNUM,d0
  8350.  lea RIGHTCHANDATA,a3
  8351.  move.w #3,d1
  8352. FindRightChannel
  8353.  tst.b (a3)
  8354.  bne.s .notactive
  8355.  cmp.b 1(a3),d0
  8356.  beq.s FOUNDRIGHT
  8357.  cmp.w 2(a3),d2
  8358.  blt.s .notactive
  8359.  move.w 2(a3),d2
  8360.  move.l a3,a2
  8361.  move.w d5,d6
  8362.  
  8363. .notactive:
  8364.  add.w #4,a3
  8365.  add.w #1,d5
  8366.  dbra d1,FindRightChannel
  8367.  move.l a2,a3
  8368.  bra.s gopastright
  8369. FOUNDRIGHT:
  8370.  move.w d5,d6
  8371. gopastright:
  8372.  tst.l a3
  8373.  bne.s FOUNDARIGHT
  8374.  rts
  8375. FOUNDARIGHT:
  8376.  
  8377. ; d6 = channel number
  8378.  move.b d0,1(a3)
  8379.  move.w d3,2(a3)
  8380.  
  8381.  move.w Samplenum,d5
  8382.  move.l #SampleList,a3
  8383.  move.l (a3,d5.w*8),a1
  8384.  move.l 4(a3,d5.w*8),a2
  8385.  
  8386.  tst.b d6
  8387.  seq NoiseMade0RIGHT
  8388.  beq.s .chan0
  8389.  cmp.b #2,d6
  8390.  slt NoiseMade1RIGHT
  8391.  blt .chan1
  8392.  seq NoiseMade2RIGHT
  8393.  beq .chan2
  8394.  st NoiseMade3RIGHT
  8395.  
  8396.  move.b d5,RIGHTPLAYEDTAB+9
  8397.  move.b d3,RIGHTPLAYEDTAB+1+9
  8398.  move.b d4,RIGHTPLAYEDTAB+2+9
  8399.  move.b d4,vol3right
  8400.  move.l a1,pos3RIGHT
  8401.  move.l a2,Samp3endRIGHT
  8402.  rts
  8403.  
  8404. .chan0: 
  8405.  move.b d5,RIGHTPLAYEDTAB
  8406.  move.b d3,RIGHTPLAYEDTAB+1
  8407.  move.b d4,RIGHTPLAYEDTAB+2
  8408.  move.l a1,pos0RIGHT
  8409.  move.l a2,Samp0endRIGHT
  8410.  move.b d4,vol0right
  8411.  rts
  8412.  
  8413. .chan1:
  8414.  move.b d5,RIGHTPLAYEDTAB+3
  8415.  move.b d3,RIGHTPLAYEDTAB+1+3
  8416.  move.b d4,RIGHTPLAYEDTAB+2+3
  8417.  move.b d3,vol1right
  8418.  move.l a1,pos1RIGHT
  8419.  move.l a2,Samp1endRIGHT
  8420.  rts
  8421.  
  8422. .chan2: 
  8423.  move.b d5,RIGHTPLAYEDTAB+6
  8424.  move.b d3,RIGHTPLAYEDTAB+1+6
  8425.  move.b d4,RIGHTPLAYEDTAB+2+6
  8426.  move.l a1,pos2RIGHT
  8427.  move.l a2,Samp2endRIGHT
  8428.  move.b d3,vol2right
  8429.  rts
  8430.  
  8431. NOSTEREO:
  8432.  move.l #0,a2
  8433.  move.l #-1,d5
  8434.  move.w #32767,d2
  8435.  move.b IDNUM,d0
  8436.  lea CHANNELDATA,a3
  8437.  move.w #7,d1
  8438. FindChannel
  8439.  tst.b (a3)
  8440.  bne.s .notactive
  8441.  cmp.b 1(a3),d0
  8442.  beq.s FOUNDCHAN
  8443.  cmp.w 2(a3),d2
  8444.  blt.s .notactive
  8445.  move.w 2(a3),d2
  8446.  move.l a3,a2
  8447.  move.w d5,d6
  8448.  add.w #1,d6
  8449.  
  8450. .notactive:
  8451.  add.w #4,a3
  8452.  add.w #1,d5
  8453.  dbra d1,FindChannel
  8454.  
  8455.  move.l a2,a3
  8456.  bra.s gopastchan
  8457. FOUNDCHAN:
  8458.  move.w d5,d6
  8459.  add.w #1,d6
  8460. gopastchan:
  8461.  tst.w d6
  8462.  bge.s FOUNDACHAN
  8463. tooquiet:
  8464.  rts
  8465. FOUNDACHAN:
  8466.  
  8467. ; d6 = channel number
  8468.  
  8469.  cmp.w noiseloud,d2
  8470.  bgt.s tooquiet
  8471.  
  8472.  move.b d0,1(a3)
  8473.  move.w noiseloud,2(a3)
  8474.  
  8475.  move.w Samplenum,d5
  8476.  move.l #SampleList,a3
  8477.  move.l (a3,d5.w*8),a1
  8478.  move.l 4(a3,d5.w*8),a2
  8479.  
  8480.  tst.b d6
  8481.  beq .chan0
  8482.  cmp.b #2,d6
  8483.  blt .chan1
  8484.  beq .chan2
  8485.  cmp.b #4,d6
  8486.  blt .chan3
  8487.  beq .chan4
  8488.  cmp.b #6,d6
  8489.  blt .chan5
  8490.  beq .chan6
  8491.  st NoiseMade3RIGHT
  8492.  
  8493.  move.b d5,RIGHTPLAYEDTAB+9
  8494.  move.b d3,RIGHTPLAYEDTAB+1+9
  8495.  move.b d4,RIGHTPLAYEDTAB+2+9
  8496.  move.b d4,vol3right
  8497.  move.l a1,pos3RIGHT
  8498.  move.l a2,Samp3endRIGHT
  8499.  rts
  8500.  
  8501. .chan3:
  8502.  st NoiseMade3LEFT
  8503.  move.b d5,LEFTPLAYEDTAB+9
  8504.  move.b d3,LEFTPLAYEDTAB+1+9
  8505.  move.b d4,LEFTPLAYEDTAB+2+9
  8506.  move.b d3,vol3left
  8507.  move.l a1,pos3LEFT
  8508.  move.l a2,Samp3endLEFT
  8509.  bra dorightchan
  8510.  
  8511. .chan0: 
  8512.  st NoiseMade0LEFT
  8513.  move.b d5,LEFTPLAYEDTAB
  8514.  move.b d3,LEFTPLAYEDTAB+1
  8515.  move.b d4,LEFTPLAYEDTAB+2
  8516.  move.l a1,pos0LEFT
  8517.  move.l a2,Samp0endLEFT
  8518.  move.b d3,vol0left
  8519.  rts
  8520.  
  8521. .chan1:
  8522.  st NoiseMade1LEFT
  8523.  move.b d5,LEFTPLAYEDTAB+3
  8524.  move.b d3,LEFTPLAYEDTAB+1+3
  8525.  move.b d4,LEFTPLAYEDTAB+2+3
  8526.  move.b d3,vol1left
  8527.  move.l a1,pos1LEFT
  8528.  move.l a2,Samp1endLEFT
  8529.  rts
  8530.  
  8531. .chan2: 
  8532.  st NoiseMade2LEFT
  8533.  move.b d5,LEFTPLAYEDTAB+6
  8534.  move.b d3,LEFTPLAYEDTAB+1+6
  8535.  move.b d4,LEFTPLAYEDTAB+2+6
  8536.  move.l a1,pos2LEFT
  8537.  move.l a2,Samp2endLEFT
  8538.  move.b d3,vol2left
  8539.  rts
  8540.  
  8541. .chan4: 
  8542.  st NoiseMade0RIGHT
  8543.  move.b d5,RIGHTPLAYEDTAB
  8544.  move.b d3,RIGHTPLAYEDTAB+1
  8545.  move.b d4,RIGHTPLAYEDTAB+2
  8546.  move.l a1,pos0RIGHT
  8547.  move.l a2,Samp0endRIGHT
  8548.  move.b d4,vol0right
  8549.  rts
  8550.  
  8551. .chan5:
  8552.  st NoiseMade1RIGHT
  8553.  move.b d5,RIGHTPLAYEDTAB+3
  8554.  move.b d3,RIGHTPLAYEDTAB+1+3
  8555.  move.b d4,RIGHTPLAYEDTAB+2+3
  8556.  move.b d3,vol1right
  8557.  move.l a1,pos1RIGHT
  8558.  move.l a2,Samp1endRIGHT
  8559.  rts
  8560.  
  8561. .chan6: 
  8562.  st NoiseMade2RIGHT
  8563.  move.b d5,RIGHTPLAYEDTAB+6
  8564.  move.b d3,RIGHTPLAYEDTAB+1+6
  8565.  move.b d4,RIGHTPLAYEDTAB+2+6
  8566.  move.l a1,pos2RIGHT
  8567.  move.l a2,Samp2endRIGHT
  8568.  move.b d3,vol2right
  8569.  rts
  8570.  
  8571. SampleList:
  8572.  dc.l Scream,EndScream
  8573.  dc.l Shoot,EndShoot
  8574.  dc.l Munch,EndMunch
  8575.  dc.l PooGun,EndPooGun
  8576.  dc.l Collect,EndCollect
  8577. ;5
  8578.  dc.l DoorNoise,EndDoorNoise
  8579.  dc.l 0,0
  8580.  dc.l Stomp,EndStomp
  8581.  dc.l LowScream,EndLowScream
  8582.  dc.l BaddieGun,EndBaddieGun
  8583. ;10
  8584.  dc.l SwitchNoise,EndSwitch
  8585.  dc.l Reload,EndReload
  8586.  dc.l NoAmmo,EndNoAmmo
  8587.  dc.l Splotch,EndSplotch
  8588.  dc.l SplatPop,EndSplatPop
  8589. ;15
  8590.  dc.l Boom,EndBoom
  8591.  dc.l Hiss,EndHiss
  8592.  dc.l Howl1,EndHowl1
  8593.  dc.l Howl2,EndHowl2
  8594.  dc.l Pant,EndPant
  8595. ;20
  8596.  dc.l Whoosh,EndWhoosh
  8597.  dc.l ROAR,EndROAR
  8598.  dc.l whoosh,Endwhoosh
  8599.  dc.l 0,0
  8600.  dc.l 0,0
  8601.  dc.l 0,0
  8602.  dc.l 0,0
  8603.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8604.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8605.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8606.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8607.  
  8608.  dc.l 0
  8609.  
  8610. storeval: dc.w 0
  8611.  
  8612.  include "ab3:source/wallchunk.s"
  8613.  include "ab3:source/loadfromdisk.s"
  8614.  include "ab3:source/screensetup.s"
  8615.  include "ab3:source/CONTROLLOOP.s"
  8616.  
  8617.  
  8618.  
  8619.  
  8620. saveinters:  
  8621.  dc.w 0
  8622.  
  8623. z: dc.w 10
  8624.  
  8625. notifplaying:
  8626.  dc.w 0
  8627.  
  8628. audpos1: dc.w 0
  8629. audpos1b: dc.w 0
  8630. audpos2: dc.w 0
  8631. audpos2b: dc.w 0
  8632. audpos3: dc.w 0
  8633. audpos3b: dc.w 0
  8634. audpos4: dc.w 0
  8635. audpos4b: dc.w 0
  8636.  
  8637. vol0left: dc.w 0
  8638. vol0right: dc.w 0
  8639. vol1left: dc.w 0
  8640. vol1right: dc.w 0
  8641. vol2left: dc.w 0
  8642. vol2right: dc.w 0
  8643. vol3left: dc.w 0
  8644. vol3right: dc.w 0
  8645.  
  8646. pos: dc.l 0
  8647.  
  8648. pos0LEFT: dc.l empty
  8649. pos1LEFT: dc.l empty
  8650. pos2LEFT: dc.l empty
  8651. pos3LEFT: dc.l empty
  8652. pos0RIGHT: dc.l empty
  8653. pos1RIGHT: dc.l empty
  8654. pos2RIGHT: dc.l empty
  8655. pos3RIGHT: dc.l empty
  8656.  
  8657. numtodo dc.w 0
  8658.  
  8659. npt: dc.w 0
  8660.  
  8661. pretab:
  8662. val SET 0
  8663.  REPT 128
  8664.  dc.b val
  8665. val SET val+1
  8666.  ENDR
  8667. val SET -128
  8668.  REPT 128
  8669.  dc.b val
  8670. val SET val+1
  8671.  ENDR 
  8672.  
  8673. tab:
  8674.  ds.b 256*65
  8675.  
  8676.  
  8677. test: dc.l 0
  8678.  ds.l 30
  8679.  
  8680.  even
  8681. ConstCols:
  8682. ; incbin "ConstCols"
  8683.  even
  8684. Smoothscalecols:
  8685. ; incbin "smoothbumppalscaled"
  8686.  even
  8687. SmoothTile:
  8688. ; incbin "smoothbumptile"
  8689.  even
  8690. Bumpscalecols:
  8691. ; incbin "Bumppalscaled"
  8692.  even
  8693. Bumptile:
  8694. ; incbin "bumptile"
  8695.  even
  8696. scalecols: ;incbin "bytepixpalscaled"
  8697.  even
  8698. floorscalecols:
  8699.  incbin "floorpalscaled"
  8700.  ds.w 256*4
  8701.  
  8702.  even
  8703. PaletteAddr: dc.l 0
  8704. ChunkAddr: dc.l 0
  8705. ;walltiles:
  8706. ; dc.l GreenMechanicWALL
  8707. ; dc.l BlueGreyMetalWALL
  8708. ; dc.l TechnoDetailWALL
  8709. ; dc.l BlueStoneWALL
  8710. ; dc.l RedAlertWALL
  8711. ; dc.l RockWALL
  8712. ;
  8713. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  8714. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  8715. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  8716. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  8717. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  8718. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  8719.  
  8720. floortile:
  8721.  dc.l 0
  8722. ; incbin "floortile" 
  8723.  even
  8724. wallrouts:
  8725. ; incbin "2x2WallDraw" 
  8726.  CNOP 0,64
  8727. BackPicture:
  8728.  incbin "backfile"
  8729. EndBackPicture:
  8730.  
  8731. drawpt: dc.l 0
  8732. olddrawpt: dc.l 0
  8733. frompt: dc.l 0 
  8734.  
  8735. SineTable:
  8736.  incbin "bigsine"
  8737.  
  8738. angspd: dc.w 0
  8739. flooryoff: dc.w 0
  8740. xoff: dc.l 0
  8741. yoff: dc.l 0
  8742. yvel: dc.l 0
  8743. zoff: dc.l 0
  8744. tyoff: dc.l 0
  8745. xspdval: dc.l 0
  8746. zspdval: dc.l 0
  8747. Zone: dc.w 0
  8748.  
  8749. PLR1: dc.b $ff
  8750.  even
  8751. PLR1_energy: dc.w 191
  8752. PLR1_GunSelected: dc.w 0
  8753. PLR1_cosval: dc.w 0
  8754. PLR1_sinval: dc.w 0
  8755. PLR1_angpos: dc.w 0
  8756. PLR1_angspd: dc.w 0
  8757. PLR1_xoff: dc.l 0
  8758. PLR1_yoff: dc.l 0
  8759. PLR1_yvel: dc.l 0
  8760. PLR1_zoff: dc.l 0
  8761. PLR1_tyoff: dc.l 0
  8762. PLR1_xspdval: dc.l 0
  8763. PLR1_zspdval: dc.l 0
  8764. PLR1_Zone: dc.w 0
  8765. PLR1_Roompt: dc.l 0
  8766. PLR1_OldRoompt: dc.l 0
  8767. PLR1_PointsToRotatePtr: dc.l 0
  8768. PLR1_ListOfGraphRooms: dc.l 0
  8769. PLR1_oldxoff: dc.l 0
  8770. PLR1_oldzoff: dc.l 0
  8771. PLR1_StoodInTop: dc.b 0
  8772.  even
  8773. PLR1_height: dc.l 0
  8774.  
  8775.  ds.w 4
  8776.  
  8777. OLDX1: dc.l 0
  8778. OLDX2: dc.l 0
  8779. OLDZ1: dc.l 0
  8780. OLDZ2: dc.l 0
  8781.  
  8782. XDIFF1: dc.l 0
  8783. ZDIFF1: dc.l 0
  8784. XDIFF2: dc.l 0
  8785. ZDIFF2: dc.l 0
  8786.  
  8787. PLR1s_cosval: dc.w 0
  8788. PLR1s_sinval: dc.w 0
  8789. PLR1s_angpos: dc.w 0
  8790. PLR1s_angspd: dc.w 0
  8791. PLR1s_xoff: dc.l 0
  8792. PLR1s_yoff: dc.l 0
  8793. PLR1s_yvel: dc.l 0
  8794. PLR1s_zoff: dc.l 0
  8795. PLR1s_tyoff: dc.l 0
  8796. PLR1s_xspdval: dc.l 0
  8797. PLR1s_zspdval: dc.l 0
  8798. PLR1s_Zone: dc.w 0
  8799. PLR1s_Roompt: dc.l 0
  8800. PLR1s_OldRoompt: dc.l 0
  8801. PLR1s_PointsToRotatePtr: dc.l 0
  8802. PLR1s_ListOfGraphRooms: dc.l 0
  8803. PLR1s_oldxoff: dc.l 0
  8804. PLR1s_oldzoff: dc.l 0
  8805. PLR1s_height: dc.l 0
  8806. PLR1s_targheight: dc.l 0
  8807.  
  8808. p1_xoff: dc.l 0
  8809. p1_zoff: dc.l 0
  8810. p1_yoff: dc.l 0
  8811. p1_height: dc.l 0
  8812. p1_angpos: dc.w 0
  8813. p1_bobble: dc.w 0
  8814. p1_clicked: dc.b 0
  8815. p1_spctap: dc.b 0
  8816. p1_ducked: dc.b 0
  8817. p1_gunselected: dc.b 0
  8818. p1_fire: dc.b 0
  8819.  even
  8820. p1_holddown: dc.w 0
  8821.  
  8822.  ds.w 4
  8823.  
  8824. PLR2: dc.b $ff
  8825.  even
  8826. PLR2_GunSelected: dc.w 0
  8827. PLR2_energy: dc.w 191
  8828. PLR2_cosval: dc.w 0
  8829. PLR2_sinval: dc.w 0
  8830. PLR2_angpos: dc.w 0
  8831. PLR2_angspd: dc.w 0
  8832. PLR2_xoff: dc.l 0
  8833. PLR2_yoff: dc.l 0
  8834. PLR2_yvel: dc.l 0
  8835. PLR2_zoff: dc.l 0
  8836. PLR2_tyoff: dc.l 0
  8837. PLR2_xspdval: dc.l 0
  8838. PLR2_zspdval: dc.l 0
  8839. PLR2_Zone: dc.w 0
  8840. PLR2_Roompt: dc.l 0
  8841. PLR2_OldRoompt: dc.l 0
  8842. PLR2_PointsToRotatePtr: dc.l 0
  8843. PLR2_ListOfGraphRooms: dc.l 0
  8844. PLR2_oldxoff: dc.l 0
  8845. PLR2_oldzoff: dc.l 0
  8846. PLR2_StoodInTop: dc.b 0
  8847.  even
  8848. PLR2_height: dc.l 0
  8849.  
  8850.  ds.w 4
  8851.  
  8852. PLR2s_cosval: dc.w 0
  8853. PLR2s_sinval: dc.w 0
  8854. PLR2s_angpos: dc.w 0
  8855. PLR2s_angspd: dc.w 0
  8856. PLR2s_xoff: dc.l 0
  8857. PLR2s_yoff: dc.l 0
  8858. PLR2s_yvel: dc.l 0
  8859. PLR2s_zoff: dc.l 0
  8860. PLR2s_tyoff: dc.l 0
  8861. PLR2s_xspdval: dc.l 0
  8862. PLR2s_zspdval: dc.l 0
  8863. PLR2s_Zone: dc.w 0
  8864. PLR2s_Roompt: dc.l 0
  8865. PLR2s_OldRoompt: dc.l 0
  8866. PLR2s_PointsToRotatePtr: dc.l 0
  8867. PLR2s_ListOfGraphRooms: dc.l 0
  8868. PLR2s_oldxoff: dc.l 0
  8869. PLR2s_oldzoff: dc.l 0
  8870. PLR2s_height: dc.l 0
  8871. PLR2s_targheight: dc.l 0
  8872.  
  8873.  ds.w 4
  8874.  
  8875. p2_xoff: dc.l 0
  8876. p2_zoff: dc.l 0
  8877. p2_yoff: dc.l 0
  8878. p2_height: dc.l 0
  8879. p2_angpos: dc.w 0
  8880. p2_bobble: dc.w 0
  8881. p2_clicked: dc.b 0
  8882. p2_spctap: dc.b 0
  8883. p2_ducked: dc.b 0
  8884. p2_gunselected: dc.b 0
  8885. p2_fire: dc.b 0
  8886.  even
  8887. p2_holddown: dc.w 0
  8888.  
  8889.  
  8890. liftanimtab:
  8891.  
  8892.  
  8893. endliftanimtab:
  8894.  
  8895. glassball:
  8896. ; incbin "glassball.inc"
  8897. endglass
  8898. glassballpt: dc.l glassball
  8899.  
  8900. rndtab: ; incbin "randfile"
  8901. endrnd: 
  8902.  
  8903. brightanimtab:
  8904.  dcb.w 200,20
  8905.  dc.w 5
  8906.  dc.w 10,20
  8907.  dc.w 5
  8908.  dcb.w 30,20
  8909.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  8910.  dcb.w 40,0
  8911.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  8912.  dcb.w 300,0
  8913.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  8914.  dc.w -1
  8915.  
  8916. Roompt: dc.l 0
  8917. OldRoompt: dc.l 0
  8918.  
  8919. *****************************************************************
  8920.  *
  8921.  include "AB3:source/LevelData2"
  8922.  *
  8923. *****************************************************************
  8924.  
  8925.  
  8926. wallpt: dc.l 0
  8927. floorpt: dc.l 0
  8928.  
  8929. Rotated:
  8930.  ds.l 2*800 
  8931. ObjRotated:
  8932.  ds.l 2*500
  8933.  
  8934. OnScreen:
  8935.  ds.l 2*800 
  8936.  
  8937. startwait: dc.w 0
  8938. endwait: dc.w 0
  8939.  
  8940. Faces:; incbin "faces2raw"
  8941.  
  8942. *******************************************************************
  8943.  
  8944. consttab:
  8945.  incbin "constantfile"
  8946.  
  8947. *******************************************************************
  8948.  
  8949.  
  8950.  
  8951. *********************************
  8952.  
  8953. ; include "ab3:source/loadmod.a"
  8954. ; include "ab3:source/proplayer.a"
  8955.  
  8956.  
  8957. darkentab: incbin "darkenedcols"
  8958. brightentab: incbin "brightenfile"
  8959. WorkSpace:
  8960.  ds.l 8192 
  8961. waterfile: incbin "waterfile"
  8962.  
  8963.  SECTION ffff,CODE_C
  8964.  
  8965. nullspr: dc.l 0
  8966.  
  8967.  cnop 0,8
  8968. borders:
  8969.  incbin "newleftbord"
  8970.  incbin "newrightbord"
  8971.  
  8972. health: incbin "healthstrip"
  8973. Ammunition: incbin "ammostrip"
  8974. healthpal: incbin "healthpal"
  8975. PanelKeys: incbin "greenkey"
  8976.  incbin "redkey"
  8977.  incbin "yellowkey"
  8978.  incbin "bluekey"
  8979.  
  8980. null: ds.w 500
  8981. null2: ds.w 500
  8982. null3: ds.w 500
  8983. null4: ds.w 500
  8984.  
  8985.  
  8986. Blurbfield:
  8987.  
  8988.  dc.w bpl1ptl
  8989. bl1l: dc.w 0
  8990.  dc.w bpl1pth
  8991. bl1h: dc.w 0
  8992.  
  8993.  dc.w diwstart,$2c81
  8994.  dc.w diwstop,$1cc1
  8995.  dc.w ddfstart,$38
  8996.  dc.w ddfstop,$b8
  8997.  dc.w bplcon0,$9201
  8998.  dc.w bplcon1,0
  8999.  dc.w $106,$c40
  9000. blcols:
  9001.  dc.w col0,0
  9002.  dc.w col1,$fff
  9003.  
  9004.  dc.w $108,0
  9005.  dc.w $10a,0
  9006.  
  9007.  dc.w $ffff,$fffe
  9008.  dc.w $ffff,$fffe
  9009.  
  9010. nullline:
  9011.  ds.b 80    
  9012.  
  9013.  include "ab3:source/titlecop.s"
  9014.  
  9015. bigfield:    
  9016.                 ; Start of our copper list.
  9017.  
  9018.  dc.w dmacon,$8020
  9019.  dc.w intreq,$8011
  9020.  dc.w $1fc,$f
  9021.  dc.w diwstart
  9022. winstart: dc.w $2cb1
  9023.  dc.w diwstop
  9024. winstop: dc.w $2c91
  9025.  dc.w ddfstart
  9026. fetchstart: dc.w $48
  9027.  dc.w ddfstop
  9028. fetchstop: dc.w $88
  9029.  
  9030. bordercols:
  9031.  incbin "borderpal"
  9032.  
  9033.  dc.w spr0ptl
  9034. s0l:
  9035.  dc.w 0
  9036.  dc.w spr0pth
  9037. s0h:
  9038.  dc.w 0
  9039.  dc.w spr1ptl
  9040. s1l:
  9041.  dc.w 0
  9042.  dc.w spr1pth
  9043. s1h:
  9044.  dc.w 0
  9045.  dc.w spr2ptl
  9046. s2l:
  9047.  dc.w 0
  9048.  dc.w spr2pth
  9049. s2h:
  9050.  dc.w 0
  9051.  dc.w spr3ptl
  9052. s3l:
  9053.  dc.w 0
  9054.  dc.w spr3pth
  9055. s3h:
  9056.  dc.w 0
  9057.  dc.w spr4ptl
  9058. s4l:
  9059.  dc.w 0
  9060.  dc.w spr4pth
  9061. s4h:
  9062.  dc.w 0
  9063.  dc.w spr5ptl
  9064. s5l:
  9065.  dc.w 0
  9066.  dc.w spr5pth
  9067. s5h:
  9068.  dc.w 0
  9069.  dc.w spr6ptl
  9070. s6l:
  9071.  dc.w 0
  9072.  dc.w spr6pth
  9073. s6h:
  9074.  dc.w 0
  9075.  dc.w spr7ptl
  9076. s7l:
  9077.  dc.w 0
  9078.  dc.w spr7pth
  9079. s7h:
  9080.  dc.w 0
  9081.  
  9082.  
  9083.  dc.w $106,$c42
  9084.  incbin "borderpal"
  9085.  
  9086.  dc.w $106,$8c42
  9087.  dc.w col0
  9088. hitcol: dc.w $0
  9089.  dc.w $106,$c42
  9090.  dc.w col0
  9091. hitcol2: dc.w 0
  9092.  
  9093.  dc.w bplcon0,$7201
  9094.  dc.w bplcon1
  9095. smoff:
  9096.  dc.w $0
  9097.  
  9098.  dc.w $108
  9099. modulo: dc.w -24
  9100.  dc.w $10a,-24
  9101.  
  9102.  dc.w bpl1pth
  9103. pl1h
  9104.  dc.w 0
  9105.  
  9106.  dc.w bpl1ptl
  9107. pl1l
  9108.  dc.w 0
  9109.  
  9110.  dc.w bpl2pth
  9111. pl2h
  9112.  dc.w 0
  9113.  
  9114.  dc.w bpl2ptl
  9115. pl2l
  9116.  dc.w 0
  9117.  
  9118.  dc.w bpl3pth
  9119. pl3h
  9120.  dc.w 0
  9121.  
  9122.  dc.w bpl3ptl
  9123. pl3l
  9124.  dc.w 0
  9125.  
  9126.  dc.w bpl4pth
  9127. pl4h
  9128.  dc.w 0
  9129.  
  9130.  dc.w bpl4ptl
  9131. pl4l
  9132.  dc.w 0
  9133.  
  9134.  dc.w bpl5pth
  9135. pl5h
  9136.  dc.w 0
  9137.  
  9138.  dc.w bpl5ptl
  9139. pl5l
  9140.  dc.w 0
  9141.  
  9142.  dc.w bpl6pth
  9143. pl6h
  9144.  dc.w 0
  9145.  
  9146.  dc.w bpl6ptl
  9147. pl6l
  9148.  dc.w 0
  9149.  
  9150.  dc.w bpl7pth
  9151. pl7h
  9152.  dc.w 0
  9153.  
  9154.  dc.w bpl7ptl
  9155. pl7l
  9156.  dc.w 0
  9157.  
  9158.  
  9159.  dc.w $1001,$ff00
  9160.  dc.w intreq,$11
  9161. yposcop:
  9162.  dc.w $2a11,$fffe
  9163.  dc.w $8a,0
  9164.  
  9165. ; ds.l 104*12
  9166.  
  9167. ;colbars:
  9168. ;val SET $2a
  9169. ; dcb.l 104*80,$1fe0000
  9170. ; dc.w $106,$c42
  9171. ; dc.w $80
  9172. ;pch1:
  9173. ; dc.w 0
  9174. ; dc.w $82
  9175. ;pcl1:
  9176. ; dc.w 0 
  9177. ; dc.w $88,0
  9178. ; dc.w $ffff,$fffe       ; End copper list.
  9179.  
  9180. ; ds.l 104*12
  9181.  
  9182. ;colbars2:
  9183. ;val SET $2a
  9184. ; dcb.l 104*80,$1fe0000
  9185. ; dc.w $106,$c42
  9186. ; dc.w $80
  9187. ;pch2:
  9188. ; dc.w 0
  9189. ; dc.w $82
  9190. ;pcl2:
  9191. ; dc.w 0
  9192. ; dc.w $88,0
  9193. ; dc.w $ffff,$fffe       ; End copper list.
  9194.  
  9195. ; ds.l 104*10
  9196.  
  9197. NullCopper:
  9198.  dc.w $ffff,$fffe
  9199.  
  9200. old: dc.l 0
  9201.  
  9202. prot5: dc.w 0
  9203. PanelCop:
  9204.  
  9205.  dc.w $80
  9206. och:
  9207.  dc.w 0
  9208.  dc.w $82
  9209. ocl:
  9210.  dc.w 0
  9211.  
  9212. statskip:
  9213.  dc.w $1fe,0
  9214.  dc.w $1fe,0
  9215.  
  9216.  dc.w $10c,0
  9217.  dc.w bplcon0,$1201
  9218.  dc.w bpl1ptl
  9219. n1l:
  9220.  dc.w 0
  9221.  dc.w bpl1pth
  9222. n1h:
  9223.  dc.w 0
  9224.  dc.w $108,-24
  9225.  incbin "Panelpal"
  9226.  
  9227.  dc.w bpl2pth
  9228. p2h
  9229.  dc.w 0
  9230.  
  9231.  dc.w bpl2ptl
  9232. p2l
  9233.  dc.w 0
  9234.  
  9235.  dc.w bpl3pth
  9236. p3h
  9237.  dc.w 0
  9238.  
  9239.  dc.w bpl3ptl
  9240. p3l
  9241.  dc.w 0
  9242.  
  9243.  dc.w bpl4pth
  9244. p4h
  9245.  dc.w 0
  9246.  dc.w bpl4ptl
  9247. p4l
  9248.  dc.w 0
  9249.  dc.w bpl5pth
  9250. p5h
  9251.  dc.w 0
  9252.  dc.w bpl5ptl
  9253. p5l
  9254.  dc.w 0
  9255.  dc.w bpl6pth
  9256. p6h
  9257.  dc.w 0
  9258.  dc.w bpl6ptl
  9259. p6l
  9260.  dc.w 0
  9261.  dc.w bpl7pth
  9262. p7h
  9263.  dc.w 0
  9264.  dc.w bpl7ptl
  9265. p7l
  9266.  dc.w 0
  9267.  dc.w bpl8pth
  9268. p8h
  9269.  dc.w 0
  9270.  dc.w bpl8ptl
  9271. p8l
  9272.  dc.w 0
  9273.  
  9274.  
  9275.  dc.w ddfstart,$38
  9276.  dc.w ddfstop,$b8
  9277.  dc.w diwstart,$2c81
  9278.  dc.w diwstop,$2cc1
  9279.  
  9280.  dc.w bplcon0
  9281. Panelcon: dc.w $0211
  9282.  dc.w bpl1pth
  9283. p1h
  9284.  dc.w 0
  9285.  
  9286.  dc.w bpl1ptl
  9287. p1l
  9288.  dc.w 0
  9289.  
  9290.  
  9291.  dc.w $108,40*7
  9292.  dc.w $10a,40*7
  9293.  
  9294.  dc.w $ffff,$fffe
  9295.  
  9296.  dc.w $180,$fff
  9297.  
  9298.  
  9299.  dc.w $f801,$ff00
  9300.  dc.w col1,$50
  9301.  dc.w $f901,$ff00
  9302.  dc.w col1,$90
  9303.  dc.w $fa01,$ff00
  9304.  dc.w col1,$f0
  9305.  dc.w $fb01,$ff00
  9306.  dc.w col1,$f0
  9307.  dc.w $fc01,$ff00
  9308.  dc.w col1,$90
  9309.  dc.w $fd01,$ff00
  9310.  dc.w col1,$50
  9311.  
  9312.  dc.w $fe01,$ff00
  9313.  dc.w col1,$fff
  9314.  
  9315.  dc.w $ffdf,$fffe
  9316.  dc.w $a01,$ff00
  9317.  dc.w bplcon0,$201
  9318.  
  9319.  incbin "faces2cols"
  9320.  dc.w bpl1pth
  9321. f1h
  9322.  dc.w 0
  9323.  
  9324.  dc.w bpl1ptl
  9325. f1l
  9326.  dc.w 0
  9327.  
  9328.  dc.w bpl2pth
  9329. f2h
  9330.  dc.w 0
  9331.  
  9332.  dc.w bpl2ptl
  9333. f2l
  9334.  dc.w 0
  9335.  
  9336.  dc.w bpl3pth
  9337. f3h
  9338.  dc.w 0
  9339.  
  9340.  dc.w bpl3ptl
  9341. f3l
  9342.  dc.w 0
  9343.  
  9344.  dc.w bpl4pth
  9345. f4h
  9346.  dc.w 0
  9347.  dc.w bpl4ptl
  9348. f4l
  9349.  dc.w 0
  9350.  
  9351.  dc.w bpl5pth
  9352. f5h
  9353.  dc.w 0
  9354.  dc.w bpl5ptl
  9355. f5l
  9356.  dc.w 0
  9357.  
  9358.  dc.w $0c01,$ff00
  9359.  dc.w bplcon0,$5201
  9360.   
  9361.  dc.w $ffff,$fffe
  9362.  
  9363.  cnop 0,64
  9364. FacePlace:
  9365. ; ds.l 6*32*5
  9366.  
  9367. TEXTSCRN: dc.l 0
  9368.  
  9369. TEXTCOP:
  9370.  dc.w intreq,$8030
  9371.  
  9372.  dc.w spr0ptl
  9373. txs0l:
  9374.  dc.w 0
  9375.  dc.w spr0pth
  9376. txs0h:
  9377.  dc.w 0
  9378.  dc.w spr1ptl
  9379. txs1l:
  9380.  dc.w 0
  9381.  dc.w spr1pth
  9382. txs1h:
  9383.  dc.w 0
  9384.  dc.w spr2ptl
  9385. txs2l:
  9386.  dc.w 0
  9387.  dc.w spr2pth
  9388. txs2h:
  9389.  dc.w 0
  9390.  dc.w spr3ptl
  9391. txs3l:
  9392.  dc.w 0
  9393.  dc.w spr3pth
  9394. txs3h:
  9395.  dc.w 0
  9396.  dc.w spr4ptl
  9397. txs4l:
  9398.  dc.w 0
  9399.  dc.w spr4pth
  9400. txs4h:
  9401.  dc.w 0
  9402.  dc.w spr5ptl
  9403. txs5l:
  9404.  dc.w 0
  9405.  dc.w spr5pth
  9406. txs5h:
  9407.  dc.w 0
  9408.  dc.w spr6ptl
  9409. txs6l:
  9410.  dc.w 0
  9411.  dc.w spr6pth
  9412. txs6h:
  9413.  dc.w 0
  9414.  dc.w spr7ptl
  9415. txs7l:
  9416.  dc.w 0
  9417.  dc.w spr7pth
  9418. txs7h:
  9419.  dc.w 0
  9420.  
  9421.  
  9422.  dc.w $10c,$0088
  9423.  
  9424.  dc.w $1fc,$f
  9425.  dc.w diwstart,$2c81    ; Top left corner of screen.
  9426.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  9427.  dc.w ddfstart,$38      ; Data fetch start.
  9428.  dc.w ddfstop,$c8       ; Data fetch stop.
  9429.  
  9430.  dc.w bplcon0
  9431. TSCP:
  9432.  dc.w $9201
  9433.  
  9434.  dc.w $106,$c40
  9435.  
  9436.  dc.w $2a01,$ff00
  9437.  
  9438.  dc.w col0,0
  9439.  dc.w col1
  9440. TOPLET:
  9441. TXTCOLL:
  9442.  dc.w 0
  9443.   dc.w col2
  9444. BOTLET:
  9445.  dc.w 0
  9446.  dc.w col3
  9447. ALLTEXT:
  9448.  dc.w $fff
  9449.  dc.w $106,$e40
  9450.  dc.w col3
  9451. ALLTEXTLOW:
  9452.  dc.w $0
  9453.  
  9454.  
  9455.  dc.w bpl1pth
  9456. TSPTh:
  9457.  dc.w 0
  9458.  dc.w bpl1ptl
  9459. TSPTl:
  9460.  dc.w 0
  9461.  
  9462.  dc.w bpl2pth
  9463. TSPTh2:
  9464.  dc.w 0
  9465.  dc.w bpl2ptl
  9466. TSPTl2:
  9467.  dc.w 0
  9468.  
  9469.  
  9470.  dc.w $108,0
  9471.  dc.w $10a,0
  9472.  
  9473.  dc.w $ffff,$fffe
  9474.  
  9475. ********************************************
  9476. * Stuff you don't have to worry about yet. *
  9477. ********************************************
  9478.  
  9479. closeeverything:
  9480.  
  9481.  jsr mt_end
  9482.  
  9483.  move.l #nullcop,d0
  9484. ; move.l old,d0
  9485.  
  9486.  move.l d0,$dff080     ; Restore old copper list.
  9487.  move.w d0,ocl
  9488.  swap d0
  9489.  move.w d0,och
  9490.  
  9491. ; move.l doslib,a6
  9492. ; move.l #4,d1
  9493. ; jsr -198(a6)
  9494.  
  9495. ; move.l doslib,d0
  9496. ; move.l d0,a1
  9497. ; move.l 4.w,a6
  9498. ; jsr CloseLib(a6)
  9499.  
  9500.  move.l #$dff000,a6
  9501.  move.w #$8020,dmacon(a6)
  9502.  move.w #$f,dmacon(a6)
  9503.  
  9504. ; move.l 4.w,a6
  9505. ; lea VBLANKInt,a1
  9506. ; moveq #INTB_COPER,d0
  9507. ; jsr _LVORemIntServer(a6)
  9508.  
  9509. ; IFEQ CD32VER
  9510. ; move.l OLDKINT,$68.w
  9511. ; ENDC
  9512. ; move.w saveinters,d0
  9513. ; or.w #$c000,d0
  9514. ; move.w d0,intena(a6)
  9515.  clr.w $dff0a8
  9516.  clr.w $dff0b8
  9517.  clr.w $dff0c8
  9518.  clr.w $dff0d8
  9519.  
  9520.  
  9521. ; move.l oldview,a1
  9522. ; move.l a1,d0
  9523. ; move.l gfxbase,a6
  9524. ; jsr -$de(a6)
  9525.  
  9526. ; cmp.b #'s',mors
  9527. ; beq.s leaveold
  9528. ; move.w #$f8e,$dff1dc
  9529. ;leaveold:
  9530.  
  9531.  jsr RELEASELEVELMEM
  9532.  jsr RELEASESCRNMEM
  9533.  
  9534.  move.l #0,d0
  9535.  
  9536.  rts
  9537.  
  9538.  
  9539.  
  9540. intbase: dc.l 0
  9541. gfxbase: dc.l 0
  9542. oldview: dc.l 0
  9543.  
  9544. stuff:
  9545.  
  9546.     PRSDL
  9547.     Lea    gfxname(pc),a1    
  9548.     Moveq.l    #0,d0
  9549.     Move.l    $4.w,a6    
  9550.     Jsr    -$228(a6)
  9551.     add.w d1,RVAL1
  9552.     Move.l     d0,gfxbase
  9553.     Move.l    d0,a6                Use As Base Reg
  9554.     Move.l    34(a6),oldview
  9555.     move.l 38(a6),old
  9556.     rts
  9557.  
  9558. gfxname dc.b "graphics.library",0
  9559.  even
  9560. INTUNAME    dc.b    "intuition.library",0
  9561.  
  9562.  even
  9563.  
  9564.  
  9565.  cnop 0,64
  9566.  
  9567. Panel:
  9568.  dc.l 0
  9569.  
  9570. TimerScr: 
  9571. ;ds.b 40*64
  9572.  
  9573. scrntab:
  9574.  ds.b 16
  9575. val SET 32
  9576.  REPT 96
  9577.  dc.b val,val,val
  9578. val SET val+1
  9579.  ENDR
  9580.  ds.b 16
  9581.  
  9582. smallscrntab:
  9583. val SET 32
  9584.  REPT 96
  9585.  dc.b val,val
  9586. val SET val+1
  9587.  ENDR
  9588.  
  9589.  cnop 0,64
  9590. scrn:
  9591.  
  9592.  dcb.l 8,$33333333
  9593.  dc.l 0
  9594.  dc.l 0
  9595.  
  9596.  dcb.l 8,$0f0f0f0f
  9597.  dc.l 0
  9598.  dc.l 0
  9599.  
  9600.  dcb.l 8,$00ff00ff
  9601.  dc.l 0
  9602.  dc.l 0
  9603.  
  9604.  dcb.l 8,$0000ffff
  9605.  dc.l 0
  9606.  dc.l 0
  9607.  
  9608.  dc.l 0,-1,0,-1,0,-1,0,-1
  9609.  dc.l 0
  9610.  dc.l 0
  9611.  
  9612.  dc.l -1,-1,0,0,-1,-1,0,0
  9613.  dc.l 0
  9614.  dc.l 0
  9615.  
  9616.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  9617.  dc.l 0
  9618.  dc.l 0
  9619.  
  9620. NumTimes: dc.l 0
  9621. TimeCount: dc.l 0
  9622. oldtime: dc.l 0
  9623. counting: dc.b 0
  9624. oktodisplay: dc.b 0
  9625.  
  9626. INITTIMER:
  9627.  move.l #0,TimeCount
  9628.  move.l #0,NumTimes
  9629.  rts
  9630.  
  9631. STARTCOUNT:
  9632.  move.l d0,-(a7)
  9633.  move.l $dff004,d0
  9634.  and.l #$1ffff,d0
  9635.  move.l d0,oldtime
  9636.  st counting
  9637.  move.l (a7)+,d0
  9638.  rts
  9639.  
  9640. STOPCOUNT:
  9641.  move.l d0,-(a7)
  9642.  move.l $dff004,d0
  9643.  and.l #$1ffff,d0
  9644.  
  9645.  sub.l oldtime,d0
  9646.  cmp.l #-256,d0
  9647.  bge.s okcount
  9648.  add.l #313*256,d0
  9649. okcount:
  9650.  add.l d0,TimeCount
  9651.  addq.l #1,NumTimes
  9652.  clr.b counting
  9653.  move.l (a7)+,d0
  9654.  rts
  9655.  
  9656. STOPCOUNTNOADD:
  9657.  move.l d0,-(a7)
  9658.  move.l $dff004,d0
  9659.  and.l #$1ffff,d0
  9660.  
  9661.  sub.l oldtime,d0
  9662.  cmp.l #-256,d0
  9663.  bge.s okcount2
  9664.  add.l #313*256,d0
  9665. okcount2:
  9666.  add.l d0,TimeCount
  9667.  clr.b counting
  9668.  move.l (a7)+,d0
  9669.  rts
  9670.  
  9671. maxbot: dc.w 0
  9672. tstneg: dc.l 0
  9673.  
  9674. STOPTIMER:
  9675.  st oktodisplay
  9676.  rts
  9677.  
  9678. digits: incbin "numbers.inc"
  9679.  
  9680.  
  9681.  Section Sounds,CODE_C
  9682.  
  9683. nullcop:
  9684.  dc.w $106,$c40
  9685.  dc.w $180,0 
  9686.  dc.w $100,$0
  9687.  dc.w $ffff,$fffe
  9688.  
  9689. Scream:
  9690. ; incbin "ab3:sounds/Scream"
  9691. ; ds.w 100
  9692. EndScream:
  9693. LowScream:
  9694. ; incbin "ab3:sounds/LowScream"
  9695. ; ds.w 100
  9696. EndLowScream:
  9697. BaddieGun:
  9698. ; incbin "ab3:sounds/BaddieGun"
  9699. EndBaddieGun:
  9700. bass:
  9701. ; incbin "ab3:sounds/backbass+drum"
  9702. bassend:
  9703. Shoot:
  9704. ; incbin "ab3:sounds/fire!"
  9705. EndShoot:
  9706. Munch:
  9707. ; incbin "ab3:sounds/munch"
  9708. EndMunch:
  9709. PooGun:
  9710. ; incbin "ab3:sounds/shoot.dm"
  9711. EndPooGun:
  9712. Collect:
  9713. ; incbin "ab3:sounds/collect"
  9714. EndCollect:
  9715. DoorNoise:
  9716. ; incbin "ab3:sounds/newdoor"
  9717. EndDoorNoise:
  9718. Stomp:
  9719. ; incbin "ab3:sounds/footstep3"
  9720. EndStomp:
  9721. SwitchNoise:
  9722. ; incbin "ab3:sounds/switch"
  9723. EndSwitch:
  9724. Reload:
  9725. ; incbin "ab3:sounds/switch1.SFX"
  9726. EndReload:
  9727. NoAmmo:
  9728. ; incbin "ab3:sounds/noammo"
  9729. EndNoAmmo:
  9730. Splotch:
  9731. ; incbin "ab3:sounds/splotch"
  9732. EndSplotch:
  9733. SplatPop:
  9734. ; incbin "ab3:sounds/splatpop"
  9735. EndSplatPop:
  9736. Boom:
  9737. ; incbin "ab3:sounds/boom"
  9738. EndBoom:
  9739. Hiss:
  9740. ; incbin "ab3:sounds/newhiss"
  9741. EndHiss:
  9742. Howl1:
  9743. ; incbin "ab3:sounds/howl1"
  9744. EndHowl1:
  9745. Howl2:
  9746. ; incbin "ab3:sounds/howl2"
  9747. EndHowl2:
  9748. Pant:
  9749. ; incbin "ab3:sounds/pant"
  9750. EndPant:
  9751. Whoosh:
  9752. ; incbin "ab3:sounds/whoosh"
  9753. EndWhoosh:
  9754. ROAR:
  9755. ; incbin "ab3:sounds/bigscream"
  9756. EndROAR
  9757. whoosh:
  9758. ; incbin "ab3:sounds/flame"
  9759. Endwhoosh:
  9760.  SECTION music,code_c
  9761.  
  9762. UseAllChannels: dc.w 0
  9763.  
  9764. mt_init:move.l    mt_data,a0
  9765.     move.l    a0,a1
  9766.     add.l    #$3b8,a1
  9767.     moveq    #$7f,d0
  9768.     moveq    #0,d1
  9769. mt_loop:move.l    d1,d2
  9770.     subq.w    #1,d0
  9771. mt_lop2:move.b    (a1)+,d1
  9772.     cmp.b    d2,d1
  9773.     bgt.s    mt_loop
  9774.     dbf    d0,mt_lop2
  9775.     addq.b    #1,d2
  9776.  
  9777.     lea    mt_samplestarts(pc),a1
  9778.     asl.l    #8,d2
  9779.     asl.l    #2,d2
  9780.     add.l    #$43c,d2
  9781.     add.l    a0,d2
  9782.     move.l    d2,a2
  9783.     moveq    #$1e,d0
  9784. mt_lop3:clr.l    (a2)
  9785.     move.l    a2,(a1)+
  9786.     moveq    #0,d1
  9787.     move.w    42(a0),d1
  9788.     asl.l    #1,d1
  9789.     add.l    d1,a2
  9790.     add.l    #$1e,a0
  9791.     dbf    d0,mt_lop3
  9792.  
  9793.     or.b    #$2,$bfe001
  9794.     move.b    #$6,mt_speed
  9795.     clr.w    $dff0a8
  9796.     clr.w    $dff0b8
  9797.     clr.w    $dff0c8
  9798.     clr.w    $dff0d8
  9799.     clr.b    mt_songpos
  9800.     clr.b    mt_counter
  9801.     clr.w    mt_pattpos
  9802.     rts
  9803.  
  9804. mt_end:    clr.w    $dff0a8
  9805.     clr.w    $dff0b8
  9806.     clr.w    $dff0c8
  9807.     clr.w    $dff0d8
  9808.     move.w    #$f,$dff096
  9809.     rts
  9810.  
  9811. mt_music:
  9812.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  9813.     move.l    mt_data,a0
  9814.     addq.b    #$1,mt_counter
  9815.     move.b    mt_counter,D0
  9816.     cmp.b    mt_speed,D0
  9817.     blt.s    mt_nonew
  9818.     clr.b    mt_counter
  9819.     bra    mt_getnew
  9820.  
  9821. mt_nonew:
  9822.     lea    mt_voice1(pc),a6
  9823.     lea    $dff0a0,a5
  9824.     bsr    mt_checkcom
  9825.     lea    mt_voice2(pc),a6
  9826.     lea    $dff0b0,a5
  9827.     bsr    mt_checkcom
  9828.     tst.b UseAllChannels
  9829.     beq mt_endr
  9830.      lea    mt_voice3(pc),a6
  9831.     lea    $dff0c0,a5
  9832.     bsr    mt_checkcom
  9833.     lea    mt_voice4(pc),a6
  9834.     lea    $dff0d0,a5
  9835.     bsr    mt_checkcom
  9836.     bra    mt_endr
  9837.  
  9838. mt_arpeggio:
  9839.     moveq    #0,d0
  9840.     move.b    mt_counter,d0
  9841.     divs    #$3,d0
  9842.     swap    d0
  9843.     cmp.w    #$0,d0
  9844.     beq.s    mt_arp2
  9845.     cmp.w    #$2,d0
  9846.     beq.s    mt_arp1
  9847.  
  9848.     moveq    #0,d0
  9849.     move.b    $3(a6),d0
  9850.     lsr.b    #4,d0
  9851.     bra.s    mt_arp3
  9852. mt_arp1:moveq    #0,d0
  9853.     move.b    $3(a6),d0
  9854.     and.b    #$f,d0
  9855.     bra.s    mt_arp3
  9856. mt_arp2:move.w    $10(a6),d2
  9857.     bra.s    mt_arp4
  9858. mt_arp3:asl.w    #1,d0
  9859.     moveq    #0,d1
  9860.     move.w    $10(a6),d1
  9861.     lea    mt_periods(pc),a0
  9862.     moveq    #$24,d7
  9863. mt_arploop:
  9864.     move.w    (a0,d0.w),d2
  9865.     cmp.w    (a0),d1
  9866.     bge.s    mt_arp4
  9867.     addq.l    #2,a0
  9868.     dbf    d7,mt_arploop
  9869.     rts
  9870. mt_arp4:move.w    d2,$6(a5)
  9871.     rts
  9872.  
  9873. mt_getnew:
  9874.     move.l    mt_data,a0
  9875.     move.l    a0,a3
  9876.     move.l    a0,a2
  9877.     add.l    #$c,a3
  9878.     add.l    #$3b8,a2
  9879.     add.l    #$43c,a0
  9880.  
  9881.     moveq    #0,d0
  9882.     move.l    d0,d1
  9883.     move.b    mt_songpos,d0
  9884.     move.b    (a2,d0.w),d1
  9885.     asl.l    #8,d1
  9886.     asl.l    #2,d1
  9887.     add.w    mt_pattpos,d1
  9888.     clr.w    mt_dmacon
  9889.  
  9890.     lea    $dff0a0,a5
  9891.     lea    mt_voice1(pc),a6
  9892.     bsr    mt_playvoice
  9893.     lea    $dff0b0,a5
  9894.     lea    mt_voice2(pc),a6
  9895.     bsr    mt_playvoice
  9896.     tst.b UseAllChannels
  9897.     beq mt_setdma
  9898.     lea    $dff0c0,a5
  9899.     lea    mt_voice3(pc),a6
  9900.     bsr    mt_playvoice
  9901.     lea    $dff0d0,a5
  9902.     lea    mt_voice4(pc),a6
  9903.     bsr    mt_playvoice
  9904.     bra    mt_setdma
  9905.  
  9906. PROTCALC:
  9907. ;    include "ab3:source/protcalc.s"
  9908.     incbin "ab3:includes/protcalc.bin"
  9909. ENDPROTCALC:
  9910.  
  9911. mt_playvoice:
  9912.     move.l    (a0,d1.l),(a6)
  9913.     addq.l    #4,d1
  9914.     moveq    #0,d2
  9915.     move.b    $2(a6),d2
  9916.     and.b    #$f0,d2
  9917.     lsr.b    #4,d2
  9918.     move.b    (a6),d0
  9919.     and.b    #$f0,d0
  9920.     or.b    d0,d2
  9921.     tst.b    d2
  9922.     beq.s    mt_setregs
  9923.     moveq    #0,d3
  9924.     lea    mt_samplestarts(pc),a1
  9925.     move.l    d2,d4
  9926.     subq.l    #$1,d2
  9927.     asl.l    #2,d2
  9928.     mulu    #$1e,d4
  9929.     move.l    (a1,d2.l),$4(a6)
  9930.     move.w    (a3,d4.l),$8(a6)
  9931.     move.w    $2(a3,d4.l),$12(a6)
  9932.     move.w    $4(a3,d4.l),d3
  9933.     tst.w    d3
  9934.     beq.s    mt_noloop
  9935.     move.l    $4(a6),d2
  9936.     asl.w    #1,d3
  9937.     add.l    d3,d2
  9938.     move.l    d2,$a(a6)
  9939.     move.w    $4(a3,d4.l),d0
  9940.     add.w    $6(a3,d4.l),d0
  9941.     move.w    d0,8(a6)
  9942.     move.w    $6(a3,d4.l),$e(a6)
  9943.     move.w    $12(a6),d0
  9944.     asr.w #2,d0
  9945.     move.w d0,$8(a5)
  9946.     bra.s    mt_setregs
  9947. mt_noloop:
  9948.     move.l    $4(a6),d2
  9949.     add.l    d3,d2
  9950.     move.l    d2,$a(a6)
  9951.     move.w    $6(a3,d4.l),$e(a6)
  9952.     move.w    $12(a6),d0
  9953.     asr.w #2,d0
  9954.     move.w d0,$8(a5)
  9955. mt_setregs:
  9956.     move.w    (a6),d0
  9957.     and.w    #$fff,d0
  9958.     beq    mt_checkcom2
  9959.     move.b    $2(a6),d0
  9960.     and.b    #$F,d0
  9961.     cmp.b    #$3,d0
  9962.     bne.s    mt_setperiod
  9963.     bsr    mt_setmyport
  9964.     bra    mt_checkcom2
  9965. mt_setperiod:
  9966.     move.w    (a6),$10(a6)
  9967.     and.w    #$fff,$10(a6)
  9968.     move.w    $14(a6),d0
  9969.     move.w    d0,$dff096
  9970.     clr.b    $1b(a6)
  9971.  
  9972.     move.l    $4(a6),(a5)
  9973.     move.w    $8(a6),$4(a5)
  9974.     move.w    $10(a6),d0
  9975.     and.w    #$fff,d0
  9976.     move.w    d0,$6(a5)
  9977.     move.w    $14(a6),d0
  9978.     or.w    d0,mt_dmacon
  9979.     bra    mt_checkcom2
  9980.  
  9981. mt_setdma:
  9982.      move.w #250,d0
  9983. mt_wait:
  9984.      add.w #1,testchip
  9985.      dbra d0,mt_wait
  9986.     move.w    mt_dmacon,d0
  9987.     or.w    #$8000,d0
  9988.     and.w #%1111111111110011,d0
  9989.     move.w    d0,$dff096
  9990.     move.w #250,d0
  9991. mt_wait2:
  9992.     add.w #1,testchip
  9993.     dbra    d0,mt_wait2
  9994.     lea    $dff000,a5
  9995.     tst.b UseAllChannels
  9996.     beq.s noall
  9997.     lea    mt_voice4(pc),a6
  9998.     move.l    $a(a6),$d0(a5)
  9999.     move.w    $e(a6),$d4(a5)
  10000.     lea    mt_voice3(pc),a6
  10001.     move.l    $a(a6),$c0(a5)
  10002.     move.w    $e(a6),$c4(a5)
  10003. noall:
  10004.     lea    mt_voice2(pc),a6
  10005.     move.l    $a(a6),$b0(a5)
  10006.     move.w    $e(a6),$b4(a5)
  10007.     lea    mt_voice1(pc),a6
  10008.     move.l    $a(a6),$a0(a5)
  10009.     move.w    $e(a6),$a4(a5)
  10010.  
  10011.     add.w    #$10,mt_pattpos
  10012.     cmp.w    #$400,mt_pattpos
  10013.     bne.s    mt_endr
  10014. mt_nex:    clr.w    mt_pattpos
  10015.     clr.b    mt_break
  10016.     addq.b    #1,mt_songpos
  10017.     and.b    #$7f,mt_songpos
  10018.     move.b    mt_songpos,d1
  10019. ;    cmp.b    mt_data+$3b6,d1
  10020. ;    bne.s    mt_endr
  10021. ;    move.b    mt_data+$3b7,mt_songpos
  10022. mt_endr:tst.b    mt_break
  10023.     bne.s    mt_nex
  10024.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  10025.     rts
  10026.  
  10027. mt_setmyport:
  10028.     move.w    (a6),d2
  10029.     and.w    #$fff,d2
  10030.     move.w    d2,$18(a6)
  10031.     move.w    $10(a6),d0
  10032.     clr.b    $16(a6)
  10033.     cmp.w    d0,d2
  10034.     beq.s    mt_clrport
  10035.     bge.s    mt_rt
  10036.     move.b    #$1,$16(a6)
  10037.     rts
  10038. mt_clrport:
  10039.     clr.w    $18(a6)
  10040. mt_rt:    rts
  10041.  
  10042. CODESTORE: dc.l 0
  10043.  
  10044. mt_myport:
  10045.     move.b    $3(a6),d0
  10046.     beq.s    mt_myslide
  10047.     move.b    d0,$17(a6)
  10048.     clr.b    $3(a6)
  10049. mt_myslide:
  10050.     tst.w    $18(a6)
  10051.     beq.s    mt_rt
  10052.     moveq    #0,d0
  10053.     move.b    $17(a6),d0
  10054.     tst.b    $16(a6)
  10055.     bne.s    mt_mysub
  10056.     add.w    d0,$10(a6)
  10057.     move.w    $18(a6),d0
  10058.     cmp.w    $10(a6),d0
  10059.     bgt.s    mt_myok
  10060.     move.w    $18(a6),$10(a6)
  10061.     clr.w    $18(a6)
  10062. mt_myok:move.w    $10(a6),$6(a5)
  10063.     rts
  10064. mt_mysub:
  10065.     sub.w    d0,$10(a6)
  10066.     move.w    $18(a6),d0
  10067.     cmp.w    $10(a6),d0
  10068.     blt.s    mt_myok
  10069.     move.w    $18(a6),$10(a6)
  10070.     clr.w    $18(a6)
  10071.     move.w    $10(a6),$6(a5)
  10072.     rts
  10073.  
  10074. mt_vib:    move.b    $3(a6),d0
  10075.     beq.s    mt_vi
  10076.     move.b    d0,$1a(a6)
  10077.  
  10078. mt_vi:    move.b    $1b(a6),d0
  10079.     lea    mt_sin(pc),a4
  10080.     lsr.w    #$2,d0
  10081.     and.w    #$1f,d0
  10082.     moveq    #0,d2
  10083.     move.b    (a4,d0.w),d2
  10084.     move.b    $1a(a6),d0
  10085.     and.w    #$f,d0
  10086.     mulu    d0,d2
  10087.     lsr.w    #$6,d2
  10088.     move.w    $10(a6),d0
  10089.     tst.b    $1b(a6)
  10090.     bmi.s    mt_vibmin
  10091.     add.w    d2,d0
  10092.     bra.s    mt_vib2
  10093. mt_vibmin:
  10094.     sub.w    d2,d0
  10095. mt_vib2:move.w    d0,$6(a5)
  10096.     move.b    $1a(a6),d0
  10097.     lsr.w    #$2,d0
  10098.     and.w    #$3c,d0
  10099.     add.b    d0,$1b(a6)
  10100.     rts
  10101.  
  10102. mt_nop:    move.w    $10(a6),$6(a5)
  10103.     rts
  10104.  
  10105.  
  10106. mt_checkcom:
  10107.     move.w    $2(a6),d0
  10108.     and.w    #$fff,d0
  10109.     beq.s    mt_nop
  10110.     move.b    $2(a6),d0
  10111.     and.b    #$f,d0
  10112.     tst.b    d0
  10113.     beq    mt_arpeggio
  10114.     cmp.b    #$1,d0
  10115.     beq.s    mt_portup
  10116.     cmp.b    #$2,d0
  10117.     beq    mt_portdown
  10118.     cmp.b    #$3,d0
  10119.     beq    mt_myport
  10120.     cmp.b    #$4,d0
  10121.     beq    mt_vib
  10122.     move.w    $10(a6),$6(a5)
  10123.     cmp.b    #$a,d0
  10124.     beq.s    mt_volslide
  10125.     rts
  10126.  
  10127. mt_volslide:
  10128.     moveq    #0,d0
  10129.     move.b    $3(a6),d0
  10130.     lsr.b    #4,d0
  10131.     tst.b    d0
  10132.     beq.s    mt_voldown
  10133.     add.w    d0,$12(a6)
  10134.     cmp.w    #$40,$12(a6)
  10135.     bmi.s    mt_vol2
  10136.     move.w    #$40,$12(a6)
  10137. mt_vol2:move.w    $12(a6),d0
  10138.     asr.w #2,d0
  10139.     move.w d0,$8(a5)
  10140.     rts
  10141.  
  10142. mt_voldown:
  10143.     moveq    #0,d0
  10144.     move.b    $3(a6),d0
  10145.     and.b    #$f,d0
  10146.     sub.w    d0,$12(a6)
  10147.     bpl.s    mt_vol3
  10148.     clr.w    $12(a6)
  10149. mt_vol3:move.w    $12(a6),d0
  10150.     asr.w #2,d0
  10151.     move.w d0,$8(a5)
  10152.     rts
  10153.  
  10154. mt_portup:
  10155.     moveq    #0,d0
  10156.     move.b    $3(a6),d0
  10157.     sub.w    d0,$10(a6)
  10158.     move.w    $10(a6),d0
  10159.     and.w    #$fff,d0
  10160.     cmp.w    #$71,d0
  10161.     bpl.s    mt_por2
  10162.     and.w    #$f000,$10(a6)
  10163.     or.w    #$71,$10(a6)
  10164. mt_por2:move.w    $10(a6),d0
  10165.     and.w    #$fff,d0
  10166.     move.w    d0,$6(a5)
  10167.     rts
  10168.  
  10169. mt_portdown:
  10170.     clr.w    d0
  10171.     move.b    $3(a6),d0
  10172.     add.w    d0,$10(a6)
  10173.     move.w    $10(a6),d0
  10174.     and.w    #$fff,d0
  10175.     cmp.w    #$358,d0
  10176.     bmi.s    mt_por3
  10177.     and.w    #$f000,$10(a6)
  10178.     or.w    #$358,$10(a6)
  10179. mt_por3:move.w    $10(a6),d0
  10180.     and.w    #$fff,d0
  10181.     move.w    d0,$6(a5)
  10182.     rts
  10183.  
  10184. mt_checkcom2:
  10185.     move.b    $2(a6),d0
  10186.     and.b    #$f,d0
  10187.     cmp.b    #$e,d0
  10188.     beq.s    mt_setfilt
  10189.     cmp.b    #$d,d0
  10190.     beq.s    mt_pattbreak
  10191.     cmp.b    #$b,d0
  10192.     beq.s    mt_posjmp
  10193.     cmp.b    #$c,d0
  10194.     beq.s    mt_setvol
  10195.     cmp.b    #$f,d0
  10196.     beq.s    mt_setspeed
  10197.     rts
  10198.  
  10199. mt_setfilt:
  10200.     move.b    $3(a6),d0
  10201.     and.b    #$1,d0
  10202.     asl.b    #$1,d0
  10203.     and.b    #$fd,$bfe001
  10204.     or.b    d0,$bfe001
  10205.     rts
  10206. mt_pattbreak:
  10207.     not.b    mt_break
  10208.     rts
  10209. mt_posjmp:
  10210.     st reachedend
  10211.     move.b    $3(a6),d0
  10212.     subq.b    #$1,d0
  10213.     move.b    d0,mt_songpos
  10214.     not.b    mt_break
  10215.     rts
  10216. mt_setvol:
  10217.     cmp.b    #$40,$3(a6)
  10218.     ble.s    mt_vol4
  10219.     move.b    #$40,$3(a6)
  10220. mt_vol4:move.b    $3(a6),d0
  10221.     asr.w #2,d0
  10222.     move.w d0,$8(a5)
  10223.     rts
  10224. mt_setspeed:
  10225.     cmp.b    #$1f,$3(a6)
  10226.     ble.s    mt_sets
  10227.     move.b    #$1f,$3(a6)
  10228. mt_sets:move.b    $3(a6),d0
  10229.     beq.s    mt_rts2
  10230.     move.b    d0,mt_speed
  10231.     clr.b    mt_counter
  10232. mt_rts2:rts
  10233.  
  10234. mt_sin:
  10235.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  10236.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  10237.  
  10238. mt_periods:
  10239.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  10240.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  10241.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  10242.  DC.w $007f,$0078,$0071,$0000,$0000
  10243.  
  10244. reachedend: dc.b 0
  10245. mt_speed:    DC.b    6
  10246. mt_songpos:    DC.b    0
  10247. mt_pattpos:    DC.w    0
  10248. mt_counter:    DC.b    0
  10249.  
  10250. mt_break:    DC.b    0
  10251. mt_dmacon:    DC.w    0
  10252. mt_samplestarts:DS.L    $1f
  10253. mt_voice1:    DS.w    10
  10254.         DC.w    1
  10255.         DS.w    3
  10256. mt_voice2:    DS.w    10
  10257.         DC.w    2
  10258.         DS.w    3
  10259. mt_voice3:    DS.w    10
  10260.         DC.w    4
  10261.         DS.w    3
  10262. mt_voice4:    DS.w    10
  10263.         DC.w    8
  10264.         DS.w    3
  10265.  
  10266. testchip: dc.w 0
  10267.  
  10268. ;/* End of File */
  10269. mt_data: dc.l 0
  10270. tstchip: dc.l 0
  10271.  include "SERIAL_NIGHTMARE"
  10272.  
  10273. ingame:
  10274. ; incbin "ab3:includes/ingame"
  10275. gameover: incbin "ab3:includes/gameover"
  10276. welldone: incbin "ab3:includes/welldone"
  10277.